2016-03-28 2 views
1

Ich habe eine verarbeite_formular Seite wie folgt aus:PHP-Sitzung nach Umleitung verloren - versucht, alles von Google und Stackoverflow

<?php 
    include_once 'includes/db_connect.php'; 
    include_once 'includes/functions.php'; 
    sec_session_start(); // Our custom secure way of starting a PHP session. 
    if (isset($_POST['email'], $_POST['p'])) { 
     $email = $_POST['email']; 
     $password = $_POST['p']; // The hashed password. 
     if (login($email, $password, $mysqli) == true) { 
      // Login success 
      header('Location: test.php'); 
      die(); 
     } else { 
      // Login failed 
      header('Location: login.php?error=1'); 
      exit; 
     } 
    } else { 
     // The correct POST variables were not sent to this page. 
     echo 'Invalid Request'; 
    } 

?> 

Wenn ich ein tun print_r($_SESSION) nach //Login success ich habe alle $_SESSION OK. Nach der Weiterleitung ist es weg. Ich habe fast alle versucht (exit;exit();die(); nach header() und immer noch nichts setzen

Mein Test PHP-Seite.

<?php 
include_once 'includes/functions.php'; 
sec_session_start(); 
print_r($_SESSION); 

und die sec_session_start() Funktion:

function sec_session_start() { 
    $session_name = 'sec_session_id'; // Set a custom session name 
    $secure = true; 
    // This stops JavaScript being able to access the session id. 
    $httponly = true; 
    // Forces sessions to only use cookies. 
    if (ini_set('session.use_only_cookies', 1) === FALSE) { 
     header("Location: ../error.php?err=Could not initiate a safe session (ini_set)"); 
     exit(); 
    } 
    // Gets current cookies params. 
    $cookieParams = session_get_cookie_params(); 
    session_set_cookie_params($cookieParams["lifetime"], 
     $cookieParams["path"], 
     $cookieParams["domain"], 
     $secure, 
     $httponly); 
    // Sets the session name to the one set above. 
    session_name($session_name); 
    session_start();   // Start the PHP session 
    session_regenerate_id(true); // regenerated the session, delete the old one. 
} 

Ich habe $ _SESSION Parameter in login Funktion

Ich weiß nicht, was ich tun soll bug dies.

php.ini SESSION Parameter:

session.save_path="C:\xampp\tmp" 
session.use_strict_mode=0 
session.use_cookies=1 
session.use_only_cookies=1 
session.name=PHPSESSID 
session.cookie_lifetime=0 
session.cookie_path=/ 
session.cache_expire=180 
session.save_handler=files 

Nach Zeile für Zeile aus dem sec_session_start() Entfernen ich es diese durch Entfernen aus arbeiten:

$cookieParams = session_get_cookie_params(); 
    session_set_cookie_params($cookieParams["lifetime"], 
     $cookieParams["path"], 
     $cookieParams["domain"], 
     **$secure**, 
     $httponly); 

Jetzt kann ich $_SESSION Variable in test.php erhalten .

Update # 2: nur Einstellung $secure = false funktioniert.

+0

zeigen Sie Apache Fehlerprotokoll? – Naumov

+0

versuchen, "ob_start();" am Anfang der Seite –

+0

@RanjeetSingh warum? – Naumov

Antwort

0

Problem ist dies

session_regenerate_id(true); // regenerated the session, delete the old one. 

diese Zeile entfernt es immer wieder neue ID zu erzeugen und entfernt alte.

+0

hat bereits dasselbe Ergebnis versucht. – 123onetwothree

+0

Wie Sie die Anmeldung validieren und wo Sie diese Anmeldung durchführen; Kannst du diesen Code auch teilen? – itzmukeshy7

+0

Nachdem ich den Benutzer überprüft und mit der Datenbank übergeben habe, setze ich '$ _SESSION ['username'] = $ db_user' und' return true; ' – 123onetwothree

0

Sie diese Zeile nicht brauchen:

session_regenerate_id(true); 

Diese Linie neue ID regenerieren, die die vorhandene überschreiben.

session_regenerate_id() wird die aktuelle Session-ID durch einen neuen ersetzen und die aktuellen Session-Informationen halten.

Quelle: http://php.net/manual/en/function.session-regenerate-id.php

+0

Ich habe gerade diese Zeile wieder entfernt und immer noch das gleiche Problem – 123onetwothree

0

Eigentlich ich es herausfinden. Ich war die $secure = true Optionen, die Sitzungen nur über sichere Verbindungen erzwungen.

1

Ich kenne diesen Code von here @ WiKiHow.

einfach diese Zeile aus kommentieren:

session_name($session_name); 

und es wird funktionieren. Ich bin nicht Profi, also bin ich mir nicht sicher, dass dies der beste Weg ist, um das Problem zu lösen, aber Sie können mehr Informationen erhalten here @ GitHub.

„, um diesen Acording marc.info/?l=php-doc-bugs & m = 120303453328364 & w = 2 können Sie nicht gesetzt Sitzungsnamen über session_name ($ session_name), wenn es gesetzt ist mit php_admin_value in‚httpd.conf '(Es ist kein Fehler). Es passiert auf Shared-Hosting-Konten. "

Verwandte Themen