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-Key: 7107042726

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

Printed on: April 27, 2024 at 11:04 o'clock

Member: martenk
martenk May 11, 2023 at 07:57:43 (UTC)
Goto Top
var_dump($_SESSION);

gibt NULL aus
Member: godlie
godlie May 11, 2023 at 07:58:24 (UTC)
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
Member: martenk
martenk May 11, 2023 at 08:10:06 (UTC)
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
Member: godlie
godlie May 11, 2023 updated at 08:17:22 (UTC)
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
Member: martenk
martenk May 11, 2023 at 08:35:21 (UTC)
Goto Top
exit() rausgenommen

errorlog keinen Zugriff
Member: em-pie
em-pie May 11, 2023 updated at 11:06:37 (UTC)
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
Member: martenk
martenk May 11, 2023 at 11:57:38 (UTC)
Goto Top
bekomme keine Fehlermeldung
Member: martenk
martenk May 11, 2023 at 11:58:15 (UTC)
Goto Top
ich finde es nur komisch, dass es local geht und im web nicht
Member: godlie
godlie May 11, 2023 at 12:01:41 (UTC)
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
Member: martenk
martenk May 11, 2023 at 12:03:54 (UTC)
Goto Top
hosteurope - PHP Version 8.1.16-he.0
local - PHP Version 8.1.10
Member: martenk
martenk May 11, 2023 at 12:05:36 (UTC)
Goto Top
was soll ich da vergleichen
Member: godlie
godlie May 11, 2023 updated at 12:08:30 (UTC)
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 ...
Member: martenk
martenk May 11, 2023 at 12:17:21 (UTC)
Goto Top
meinedomain.de:443:0 server certificate does NOT include an ID which matches the server name
Member: martenk
martenk May 11, 2023 at 12:22:10 (UTC)
Goto Top
PHP Fatal error: Uncaught ValueError: mysqli::query(): Argument #1 ($query) cannot be empty in
Mitglied: 7010350221
7010350221 May 11, 2023 updated at 12:23:39 (UTC)
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 ...
Member: martenk
martenk May 11, 2023 updated at 12:30:37 (UTC)
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
Member: martenk
martenk May 11, 2023 updated at 12:27:41 (UTC)
Goto Top
@7010350221 - wie kann man das ändern
Mitglied: 7010350221
7010350221 May 11, 2023 updated at 12:32:35 (UTC)
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
Member: martenk
martenk May 11, 2023 at 12:46:23 (UTC)
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;

....
....
Member: martenk
martenk May 11, 2023 at 12:47:27 (UTC)
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
Mitglied: 7010350221
7010350221 May 11, 2023 updated at 13:02:11 (UTC)
Goto Top
Da kommt dann noch ein Grundkurs PHP mit auf die Liste bei der Masse an überflüssigen IF Abfragen ... 🍌🫣
Member: martenk
martenk May 11, 2023 updated at 13:04:59 (UTC)
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
Mitglied: 7010350221
7010350221 May 11, 2023 at 13:05:53 (UTC)
Goto Top
Member: martenk
martenk May 11, 2023 at 13:16:54 (UTC)
Goto Top
nur das Problem mit der Session bleibt doch nach wie vor, das die Variable nicht übergenen wird
Member: godlie
godlie May 11, 2023 at 13:19:10 (UTC)
Goto Top
Da wird dir nur der helfen können, der das ganze geschrieben hat.....
Member: martenk
martenk May 11, 2023 at 13:38:25 (UTC)
Goto Top
geht leider nicht mehr - ich hatte gehofft ihr könnt mir helfen
Member: godlie
godlie May 11, 2023 at 13:39:45 (UTC)
Goto Top
Tja ohne das man das ganze Konstrukt überblicken kann, kann dir da keiner wirklich helfen ...
Member: martenk
martenk May 11, 2023 updated at 14:10:14 (UTC)
Goto Top
okay verstehe ich - das doofe ist echt, dass es lokal funktioniert und im web nicht
Member: HansFenner
HansFenner May 24, 2023 at 23:55:41 (UTC)
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.