session_set_cookie_params() Einstellung zwei cookies nach redirect
Ich verwende eine leicht modifizierte version des login-Scripte gefunden hier, und haben, laufen Sie in Verhalten, das ich denke, dass kommt von session_set_cookie_params() , verstehe ich nicht.
Ich bin mit sessions, cookies und header() umleiten Benutzer auf eine login-Seite, dann zurück zu der Seite, die Sie angefordert. Mein problem war, dass, obwohl die erste Seite und die login-Seite verwenden Sie die gleiche Funktion zum verarbeiten von sessions und cookies, zwei separate cookies wurden gesetzt; eine für www.example.com und eine für example.com. Dies verhindert eine session-variable setzen, die auf der ersten Seite Lesen Sie nach dem login.
Hier ist ein Beispiel-code aus jeder angeforderten Seite:
requireSSL();
sec_session_start();
if(login_check($mysqli) == false) {
$_SESSION['origURL'] = $_SERVER['REQUEST_URI'];
header('Location: https://www.example.com/login.php');
exit();
}
Hier sind die Funktionen:
function requireSSL() {
if($_SERVER["HTTPS"] != "on") {
header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
exit();
}
}
function sec_session_start() {
$session_name = 'sec_session_id'; //Set a custom session name
$secure = true; //Set to true if using https.
$httponly = true; //This stops javascript being able to access the session id.
ini_set('session.use_only_cookies', 1); //Forces sessions to only use cookies.
$cookieParams = session_get_cookie_params(); //Gets current cookies params.
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
session_name($session_name); //Sets the session name to the one set above.
session_start(); //Start the php session
session_regenerate_id(true); //regenerated the session, delete the old one.
}
Obwohl ich war in der Lage zu "reparieren" dieses Verhalten durch explizite Angabe einer Domäne in session_set_cookie_params() (z.B. "example.com") würde ich Liebe zu verstehen, warum die beiden cookies, die wurden gesetzt in den ersten Platz. Danke!
InformationsquelleAutor Grenoble | 2013-04-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum : Weil example.com und http://www.example.com das sind zwei unterschiedliche Domänen für den browser.
ist eine höhere level-domain.
ist eine untere-level-domain, bei example.com
Einstellung Ihrer cookies, um die höhere Domäne:
Auch für den session-cookie durch :
Ebenfalls das problem löst, weil die.
Also Sie ist gültig für beide http://www.example.com und example.com
Werfen Sie einen Blick auf die domain-definition auf das php-Handbuch für setcookie-Funktion
Warnung: High level-domain, die cookies gültig und zugänglich von allen Seiten auf den unteren Ebenen. Cookie für
example.com
werden barrierearm ausmysubdomain.example.com
zu.Also wenn das nicht wollten, sollten Sie differenzieren die cookie-domains.
IMHO:
Anstelle von senden der header, echo, um zu sehen, was Los ist...
InformationsquelleAutor Ihsan