2011-03-29 57 views

回答

4

设置会话cookie的路径与session_set_cookie_params。当然session_start之前。

+0

嗨,我试过:session_set_cookie_params(60 * 60 * 24 * 5,“app1”,“xxx.com”);但它没有工作。它只是停止加载其余的PHP脚本。我是否需要在php.ini中编辑某些内容? – 2011-03-29 22:31:04

+0

...做到这一点:'session_set_cookie_params(60 * 60 * 24 * 5,“/ app1”);' – Neal 2011-03-29 22:35:55

+0

如果'停止加载',你确定你不只是造成语法错误?另外,在路径中添加一个前导'/'。如果这不起作用,请在'session_start'之前尝试'ini_set('session.cookie_path','/ app1')'。注意:除非你试图对它做一些特殊的事情,否则你不必声明这个域(第三个参数)。 – Wrikken 2011-03-29 22:36:41

0

u可以使用的想法,$_SESSION变种是一个数组:

$_SESSION['app1'] = ... 
$_SESSION['app2'] = ... //etc etc 
+0

是否有'-1'的原因? – Neal 2011-03-29 22:26:43

+0

我正在使用数组来存储不同的会话,但它的session_id总是被设置为相同的ID,无论文件夹如何。 – 2011-03-29 22:33:31

0

我不确定我是否正确理解问题,但是您可以尝试检查路径以查看它是否在app1,app2等中,然后获取您感兴趣的字符串部分并使用该字符串设置会话,例如使用$_SERVER['REQUEST_URI']$_SERVER['SCRIPT_NAME']

除非你已经这样做,你的问题是它不会设置会话?

2

如果/app1/app2包含完全无关的应用程序,你可以通过使用PHP的session_name(),实行功能上都完全不相关的会议。通常,会话使用名为PHPSESSID的cookie。相反,在/app1中,您可以运行session_name('session_app_1')并在/app2中运行session_name('session_app_2')。现在这两个应用程序中的会话将完全不相关。

警告: PHP的documentation说,session_name()函数是昂贵的。也许在会话中使用更加繁忙的应用程序中的默认名称,并只在更安静的应用程序中重命名它。

+0

'切换'session_name',这就解决了我的问题。我正在试验两个目录,每个目录都包含一个不同的应用程序,它们必须共享同一个会话。设置相同的会话保存路径和相同的会话名称。 – 2015-09-18 20:45:27

0

将session_save_path设置为不同的目录将用于您的目的。例如,您可以将其设置为每个目录中的子目录,即。相对路径。否则,共享目录之间的会话将session_save_path设置为相同的完整路径。适用于我..