martenk
Goto Top

Probleme mit Session in PHP

Hallo Gemeinschaft,

habe ein Problem beim Übertrag von xampp lokal auf meinem Hoster

<?php
session_start();
// Change this to your connection info.
$DATABASE_HOST = 'localhost';  
$DATABASE_USER = '-ts';  
$DATABASE_PASS = '#';  
$DATABASE_NAME = '-';  
// Try and connect using the info above.
$con = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
if ( mysqli_connect_errno() ) {
	// If there is an error with the connection, stop the script and display the error.
	exit('Failed to connect to MySQL: ' . mysqli_connect_error());  
}

// Now we check if the data from the login form was submitted, isset() will check if the data exists.
if ( !isset($_POST['surname'], $_POST['password']) ) {  
	// Could not get the data that should have been sent.
	exit('Please fill both the username and password fields!');  
}

// Prepare our SQL, preparing the SQL statement will prevent SQL injection.
if ($stmt = $con->prepare('SELECT id_staff, password FROM staff WHERE surname = ?')) {  
	// Bind parameters (s = string, i = int, b = blob, etc), in our case the username is a string so we use "s" 
	$stmt->bind_param('s', $_POST['surname']);  
	$stmt->execute();
	// Store the result so we can check if the account exists in the database.
	$stmt->store_result();
if ($stmt->num_rows > 0) {
	$stmt->bind_result($id_staff, $password);
	$stmt->fetch();
	// Account exists, now we verify the password.
	// Note: remember to use password_hash in your registration file to store the hashed passwords.
	if (password_verify($_POST['password'], $password)) {  
		// Verification success! User has logged-in!
		// Create sessions, so we know the user is logged in, they basically act like cookies but remember the data on the server.
		session_regenerate_id();
		$_SESSION['loggedin'] = TRUE;  
		$_SESSION['name'] = $_POST['surname'];  
		$_SESSION['id_staff'] = $id_staff;  
		//echo 'Welcome ' . $_SESSION['name'] . '!'; 
	} else {
		// Incorrect password
		echo 'Incorrect username and/or password!';  
	}
} else {
	// Incorrect username
	echo 'Incorrect username and/or password!';  
}

	$stmt->close();
}
echo $_SESSION['name'];  
echo $_POST['surname'];  
?>
hier gehts weiter <a href="index.php">Kalender</a>  

hier bekomme ich die Daten noch angezeigt

auf dieser Seite schon nicht mehr

<?php
session_start();
echo $_SESSION['name'];  




?>

Content-ID: 7107042726

Url: https://administrator.de/contentid/7107042726

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

martenk
martenk 11.05.2023 um 09:57:43 Uhr
Goto Top
var_dump($_SESSION);

gibt NULL aus
godlie
godlie 11.05.2023 um 09:58:24 Uhr
Goto Top
Hallo,

ich tippe mal schwer auf mysqli_connect, aktivier mal error_reporting.

ini_set('display_errors', 1);  
ini_set('display_startup_errors', 1);  
error_reporting(E_ALL);

grüße
martenk
martenk 11.05.2023 um 10:10:06 Uhr
Goto Top
<?php
ini_set('display_errors', 1);  
ini_set('display_startup_errors', 1);  
error_reporting(E_ALL);
session_start();
//var_dump($_SESSION);
echo "ID" & session_id();  

bekomme nichts angezeigt
godlie
godlie 11.05.2023 aktualisiert um 10:17:22 Uhr
Goto Top
Hallo,

nimm doch mal die exit() aus dem Script raus und erstz die durch einen echo
solltest du Zugriff auf ein error.log haben, schau da mal rein

grüße
martenk
martenk 11.05.2023 um 10:35:21 Uhr
Goto Top
exit() rausgenommen

errorlog keinen Zugriff
em-pie
em-pie 11.05.2023 aktualisiert um 13:06:37 Uhr
Goto Top
Moin,

also wenn ich mal den geschweiften Klammer folge, muss Zeile 22 zu einem False führen und da du keinen Else-Zweig hast (Zeile 51 wird die Klammer geschlossen) bekommst da auch keine Fehlermeldung...

Prüfe das mal und baue ggf. mal ein wenig try() and catch() ein:
https://www.php.net/manual/de/language.exceptions.php
martenk
martenk 11.05.2023 um 13:57:38 Uhr
Goto Top
bekomme keine Fehlermeldung
martenk
martenk 11.05.2023 um 13:58:15 Uhr
Goto Top
ich finde es nur komisch, dass es local geht und im web nicht
godlie
godlie 11.05.2023 um 14:01:41 Uhr
Goto Top
Hallo,

mach doch mal eine file mit einem <?php phpinfo() ?> und vergleich mal was lokal bei dir ist und was online ist

Ich hab so den Verdacht, dass das error_reporting irgendwie abgedreht ist.

grüße
martenk
martenk 11.05.2023 um 14:03:54 Uhr
Goto Top
hosteurope - PHP Version 8.1.16-he.0
local - PHP Version 8.1.10
martenk
martenk 11.05.2023 um 14:05:36 Uhr
Goto Top
was soll ich da vergleichen
godlie
godlie 11.05.2023 aktualisiert um 14:08:30 Uhr
Goto Top
Schau mal nach welche values hier gesetzt sind:

bildschirmfoto 2023-05-11 um 14.07.02

Parallel dazu:

https://www.hosteurope.de/faq/webhosting/webhosting-logfiles/error-log-a ...
martenk
martenk 11.05.2023 um 14:17:21 Uhr
Goto Top
meinedomain.de:443:0 server certificate does NOT include an ID which matches the server name
martenk
martenk 11.05.2023 um 14:22:10 Uhr
Goto Top
PHP Fatal error: Uncaught ValueError: mysqli::query(): Argument #1 ($query) cannot be empty in
7010350221
7010350221 11.05.2023 aktualisiert um 14:23:39 Uhr
Goto Top
Zitat von @martenk:

meinedomain.de:443:0 server certificate does NOT include an ID which matches the server name

Na also da hast du deinen Fehler, der Common-Nams bzw. die SANs im Zertifikat stimmen nicht mit dem FQDN deiner Seite überein. Da kann dann schon keine Session vernünftig laufen ...
martenk
martenk 11.05.2023 aktualisiert um 14:30:37 Uhr
Goto Top
    public static function getStaffList() {
		if ($_SESSION['name'] =="Olaf") {$sql = "SELECT * FROM staff where surname = 'Olaf'";}  
		if ($_SESSION['name'] =="Patrick") {$sql = "SELECT * FROM staff where surname = 'Patrick'";}  
		if ($_SESSION['name'] =="Susanne") {$sql = "SELECT * FROM staff where surname = 'Susanne'";}  
		if ($_SESSION['name'] =="Steffi") {$sql = "SELECT * FROM staff where surname = 'Steffi'";}  
		if ($_SESSION['name'] =="Kira") {$sql = "SELECT * FROM staff where surname = 'Kira'";}  
		if ($_SESSION['name'] =="Claudia") {$sql = "SELECT * FROM staff where surname = 'Claudia'";}  
		if ($_SESSION['name'] =="Fango") {$sql = "SELECT * FROM staff where surname = 'Fango'";}  
		if ($_SESSION['name'] =="Philip") {$sql = "SELECT * FROM staff where surname = 'Philip'";}  
        if ($_SESSION['name'] =="Jennifer") {$sql = "SELECT * FROM staff where surname = 'Jennifer'";}  
		if ($_SESSION['name'] =="Tamara") {$sql = "SELECT * FROM staff where surname = 'Tamara'";}  
		if ($_SESSION['name'] =="Arndt") {$sql = "SELECT * FROM staff where surname = 'Arndt'";}  
		if ($_SESSION['name'] =="Miriam") {$sql = "SELECT * FROM staff where surname = 'Miriam'";}  
		if ($_SESSION['name'] =="Lea") {$sql = "SELECT * FROM staff where surname = 'Lea'";}  
		if ($_SESSION['name'] =="Alena") {$sql = "SELECT * FROM staff where surname = 'Alena'";}  
		if ($_SESSION['name'] =="Theresa") {$sql = "SELECT * FROM staff where surname = 'Theresa'";}  
		if ($_SESSION['name'] =="Inga") {$sql = "SELECT * FROM staff where surname = 'Inga'";}  
		if ($_SESSION['name'] =="Julia") {$sql = "SELECT * FROM staff where surname = 'Julia'";}  
		if ($_SESSION['name'] =="Piet") {$sql = "SELECT * FROM staff where surname = 'Piet'";}  
		if ($_SESSION['name'] =="admin") {$sql = "SELECT * FROM staff";}  
		//$sql = "SELECT * FROM staff"; 
		
       
        $result = Core::$link->query($sql); // das ist die zeile

Hier liegt es daran, dass die Session nicht übergeben wird
martenk
martenk 11.05.2023 aktualisiert um 14:27:41 Uhr
Goto Top
@7010350221 - wie kann man das ändern
7010350221
7010350221 11.05.2023 aktualisiert um 14:32:35 Uhr
Goto Top
Zitat von @martenk:

@7010350221 - wie kann man das ändern

Neues Zertifikat ausstellen lassen oder eine der im Zertifikat in den Subject Alternative Names hinterlegten Domains in der URL benutzen.
Aber alter, sowas musst man doch wissen wenn man mit Webservern hantiert! 🧐 Das sind doch absolute Basics
martenk
martenk 11.05.2023 um 14:46:23 Uhr
Goto Top
habs nun so gemacht wie du geschrieben hast - Problem bleibt bestehen - wie es aussieht, übernimmt er die session variablen nicht in der core.php

<?php
session_start();

class Core {
    /* */

    private static $config_file = "conf.ini";  

    /* */
    //var $db_conf;

    private static $link = null;
    
    /**
     * 
     * @param type $file
     */
    public static function getDBConfig() {
        $conf = parse_ini_file(Core::$config_file);
        return $conf;

....
....
martenk
martenk 11.05.2023 um 14:47:27 Uhr
Goto Top
...
...
  public static function getStaffList() {
		if ($_SESSION['name'] =="Olaf") {$sql = "SELECT * FROM staff where surname = 'Olaf'";}  
		if ($_SESSION['name'] =="Patrick") {$sql = "SELECT * FROM staff where surname = 'Patrick'";}  
		if ($_SESSION['name'] =="Susanne") {$sql = "SELECT * FROM staff where surname = 'Susanne'";}  
		if ($_SESSION['name'] =="Steffi") {$sql = "SELECT * FROM staff where surname = 'Steffi'";}  
		if ($_SESSION['name'] =="Kira") {$sql = "SELECT * FROM staff where surname = 'Kira'";}  
		if ($_SESSION['name'] =="Claudia") {$sql = "SELECT * FROM staff where surname = 'Claudia'";}  
		if ($_SESSION['name'] =="Fango") {$sql = "SELECT * FROM staff where surname = 'Fango'";}  
		if ($_SESSION['name'] =="Philip") {$sql = "SELECT * FROM staff where surname = 'Philip'";}  
        if ($_SESSION['name'] =="Jennifer") {$sql = "SELECT * FROM staff where surname = 'Jennifer'";}  
		if ($_SESSION['name'] =="Tamara") {$sql = "SELECT * FROM staff where surname = 'Tamara'";}  
		if ($_SESSION['name'] =="Arndt") {$sql = "SELECT * FROM staff where surname = 'Arndt'";}  
		if ($_SESSION['name'] =="Miriam") {$sql = "SELECT * FROM staff where surname = 'Miriam'";}  
		if ($_SESSION['name'] =="Lea") {$sql = "SELECT * FROM staff where surname = 'Lea'";}  
		if ($_SESSION['name'] =="Alena") {$sql = "SELECT * FROM staff where surname = 'Alena'";}  
		if ($_SESSION['name'] =="Theresa") {$sql = "SELECT * FROM staff where surname = 'Theresa'";}  
		if ($_SESSION['name'] =="Inga") {$sql = "SELECT * FROM staff where surname = 'Inga'";}  
		if ($_SESSION['name'] =="Julia") {$sql = "SELECT * FROM staff where surname = 'Julia'";}  
		if ($_SESSION['name'] =="Piet") {$sql = "SELECT * FROM staff where surname = 'Piet'";}  
		if ($_SESSION['name'] =="admin") {$sql = "SELECT * FROM staff";}  
		//$sql = "SELECT * FROM staff";  // wenn ich hier die kommentierung wegnehme, dann gehts 
		
       
        $result = Core::$link->query($sql); // das ist die zeile
7010350221
7010350221 11.05.2023 aktualisiert um 15:02:11 Uhr
Goto Top
Da kommt dann noch ein Grundkurs PHP mit auf die Liste bei der Masse an überflüssigen IF Abfragen ... 🍌🫣
martenk
martenk 11.05.2023 aktualisiert um 15:04:59 Uhr
Goto Top
okay - mag sein, dass es umständlich gemacht wurde - wie würdest du es denn machen

aber inhaltlich ist es doch nicht falsch -

Problem ist nur, dass der die Sessionvariable nicht beachtet - lokal bei mir schon
7010350221
7010350221 11.05.2023 um 15:05:53 Uhr
Goto Top
martenk
martenk 11.05.2023 um 15:16:54 Uhr
Goto Top
nur das Problem mit der Session bleibt doch nach wie vor, das die Variable nicht übergenen wird
godlie
godlie 11.05.2023 um 15:19:10 Uhr
Goto Top
Da wird dir nur der helfen können, der das ganze geschrieben hat.....
martenk
martenk 11.05.2023 um 15:38:25 Uhr
Goto Top
geht leider nicht mehr - ich hatte gehofft ihr könnt mir helfen
godlie
godlie 11.05.2023 um 15:39:45 Uhr
Goto Top
Tja ohne das man das ganze Konstrukt überblicken kann, kann dir da keiner wirklich helfen ...
martenk
martenk 11.05.2023 aktualisiert um 16:10:14 Uhr
Goto Top
okay verstehe ich - das doofe ist echt, dass es lokal funktioniert und im web nicht
HansFenner
HansFenner 25.05.2023 um 01:55:41 Uhr
Goto Top
Voraussetzung für PHP Sessions ist auch, dass der Browser ein Session Cookie speichern kann. Und dies ist aufgrund von immer mehr Restriktionen in den Browsern gar nicht mehr so selbstverständlich.

Im Browser auf der Konsole (F12) auf eventuelle Fehlermeldungen achten. Am besten mit Firefox und einem Chromium basierten Browser parallel testen.