2014-03-04 60 views
0

我知道我可以使用$oldSession = session_name("mySessName");设置会话的名字,这是我做的,像这样:它包含以下sessionTest1.php:多个会话

# FileName: sessionTest.php 
$old_name = session_name("TEST"); 
session_start(); 
$_SESSION["hi"]="hi"; 
print_r($_SESSION); 

我甚至可以有另一个文件:

# FileName: sessionTest.php 
$old_name = session_name("TEST1"); 
session_start(); 
$_SESSION["Bar"]="bar"; 
print_r($_SESSION); 

我可以在sessionTest.php和sessionTest1.php之间来回切换,会话只会有相应的变量。

我遇到的问题是假设一个不同的脚本已经有一个会话启动,然后调用这个文件。我所看到的是假设我有:

session_name("other"); 
session_start(); 
$_SESSION["foo"] = "foo"; 
require_once "sessionTest.php"; 
print_r($_SESSION); 

这是打印Array("foo" => "foo", "hi" => "hi")。有没有办法结束前一届会议并开始我的会议。注意:我不想破坏以前的会话,因为它可能有有价值的信息。

+0

我想'会话名称()'就是你正在寻找一个功能。 – barell

+1

我正在使用上面的session_name。 – ajon

回答

2

我做的是让我的SESSION 1层更深,然后标准。所以我可以使用该数组的图层。

一些页面:

<?php 
     $_SESSION['myApp1']['hi'] = "Hi"; 
    ?> 

其他页面:

<?php 
     $_SESSION['myApp2']['ciao'] = "Ciao"; 
?> 

所以,当我想看看会议瓦尔第2页的session_start之前,我只是

<?php 
    echo "<pre>"; 
    print_r($_SESSION['myApp2']); 
    echo "</pre>"; 

?> 
+0

这是一个很好的解决方案...它仍然容易受到每个应用程序在$ _SESSION变量的底层使用相同的应用程序名称的潜在覆盖数据。我知道session_name允许您拥有自己的会话环境,但如果已经调用session_start,它似乎不起作用。 – ajon

0

使用会话名称上。

PHP session_name

会话名称重置为在请求启动时存储在session.name的默认值。因此,您需要为每个请求调用session_name()(并在调用session_start()或session_register()之前)。

阅读本SO回答:

Multiple Sessions

+0

是的,我知道这一点......我在会话开始前使用session_name,但如果另一个页面包含我的并且已经开始会话会怎么样。所以问题变成了如何结束(但不破坏)前一个会话,以便我可以命名并开始我的会话。我也试过session_write_close(),但没有成功。 – ajon

+0

我在发布之前阅读过这个问题。如果app1和app2交互,该解决方案不起作用。如果在加载此页面时没有启动会话,则工作正常。如果会话已经启动,session_start()似乎什么都不做。 – ajon

+0

我一直在寻找我无法找到一个伟大的答案给你.... – bart2puck