2014-07-25 12 views
9

Ich möchte in der Lage sein, zwischen den Sitzungen in PHP hin und her zu wechseln. Hier ist mein aktueller Code:PHP Wie kann ich mehrere Sitzungen erstellen?

<?php 

session_name("session1"); 
session_start(); 
$_SESSION["name"] = "1"; 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_name("session2"); 
session_start(); 
$_SESSION["name"] = "2"; 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_name("session1"); 
session_start(); 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 

ich mag es Ausgabe

Array 
(
    [name] => 1 
) 
Array 
(
    [name] => 2 
) 
Array 
(
    [name] => 1 
) 

aber es ist die Ausgabe

Array 
(
    [name] => 1 
) 
Array 
(
    [name] => 2 
) 
Array 
(
    [name] => 2 
) 

Ist es möglich, um zwischen den Sitzungen wie das? Ich brauche nicht zwei Sitzungen gleichzeitig, aber ich muss in der Lage sein, zwischen ihnen zu wechseln. Wenn ich diesen Code ausführe, erhalte ich zwei Cookies: session1 und session2 mit dem gleichen Wert.

Danke für jede Hilfe!

+1

Könnte helfen: http://StackOverflow.com/Questions/7551404/php-what-is-the-purpose-of-session-name –

+0

Danke, das habe ich schon gesehen . Das ist genau das, was ich brauche, aber aus irgendeinem Grund funktioniert es nicht. – Nathan

+1

Ihr Titel sagt, dass es "nicht funktioniert", wenn es tatsächlich nicht tut, was Sie denken, dass es tun sollte. Stellen Sie sich die Frage: Wie kann ich x machen? Das habe ich ausprobiert. * –

Antwort

15

Was Sie verwenden müssen, ist session_id() statt session_name()

<?php 

session_id("session1"); 
session_start(); 
echo session_id(); 
$_SESSION["name"] = "1"; 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_id("session2"); 
echo session_id(); 
session_start(); 
$_SESSION["name"] = "2"; 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_id("session1"); 
echo session_id(); 
session_start(); 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_id("session2"); 
echo session_id(); 
session_start(); 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 

Dies drucken:

session1 

Array 
(
    [name] => 1 
) 

session2 

Array 
(
    [name] => 2 
) 

session1 

Array 
(
    [name] => 1 
) 

session2 

Array 
(
    [name] => 2 
) 

session_id eine Kennung für eine Sitzung ist, die bei der Unterscheidung zwischen Sitzungen hilft. session_name ist nur ein benannter Alias ​​für die aktuelle Sitzung

+3

Wenn Sie diese Technik verwenden, teilen sich verschiedene Benutzer mit derselben Sitzungs-ID ihre Sitzungsvariablen. Sitzungs-IDs sollen einzigartig und schwer zu erraten sein. – Barmar

+1

Die Idee ist, dass verschiedene Benutzer nicht die gleiche Sitzungs-ID erhalten sollten. Natürlich wird es keine einfache Zeichenfolge wie Session1 sein, sesson2 wäre stattdessen eine UUID, die für diesen Benutzer oder diese Session einzigartig ist. – raidenace

+1

Diese Lösung birgt große Sicherheitsrisiken, wenn sie nicht gut umgesetzt wird. – nebulousGirl