我想设置一个不同的会话ID取决于用户在哪个文件夹。同样的领域,不同的文件夹中的PHP会话
例如,我有一个具有文件夹/ APP1,/ APP2域https://example.com等。然后在每个应用程序文件夹中有多个文件。我想设置一个会话ID用于app1中的所有文件,另一个会话ID用于app2。
可以这样做吗?
我想设置一个不同的会话ID取决于用户在哪个文件夹。同样的领域,不同的文件夹中的PHP会话
例如,我有一个具有文件夹/ APP1,/ APP2域https://example.com等。然后在每个应用程序文件夹中有多个文件。我想设置一个会话ID用于app1中的所有文件,另一个会话ID用于app2。
可以这样做吗?
设置会话cookie的路径与session_set_cookie_params
。当然session_start
之前。
u可以使用的想法,$_SESSION
变种是一个数组:
$_SESSION['app1'] = ...
$_SESSION['app2'] = ... //etc etc
是否有'-1'的原因? – Neal 2011-03-29 22:26:43
我正在使用数组来存储不同的会话,但它的session_id总是被设置为相同的ID,无论文件夹如何。 – 2011-03-29 22:33:31
我不确定我是否正确理解问题,但是您可以尝试检查路径以查看它是否在app1,app2等中,然后获取您感兴趣的字符串部分并使用该字符串设置会话,例如使用$_SERVER['REQUEST_URI']
或$_SERVER['SCRIPT_NAME']
。
除非你已经这样做,你的问题是它不会设置会话?
如果/app1
和/app2
包含完全无关的应用程序,你可以通过使用PHP的session_name()
,实行功能上都完全不相关的会议。通常,会话使用名为PHPSESSID
的cookie。相反,在/app1
中,您可以运行session_name('session_app_1')
并在/app2
中运行session_name('session_app_2')
。现在这两个应用程序中的会话将完全不相关。
警告: PHP的documentation说,session_name()
函数是昂贵的。也许在会话中使用更加繁忙的应用程序中的默认名称,并只在更安静的应用程序中重命名它。
'切换'session_name',这就解决了我的问题。我正在试验两个目录,每个目录都包含一个不同的应用程序,它们必须共享同一个会话。设置相同的会话保存路径和相同的会话名称。 – 2015-09-18 20:45:27
将session_save_path设置为不同的目录将用于您的目的。例如,您可以将其设置为每个目录中的子目录,即。相对路径。否则,共享目录之间的会话将session_save_path设置为相同的完整路径。适用于我..
嗨,我试过:session_set_cookie_params(60 * 60 * 24 * 5,“app1”,“xxx.com”);但它没有工作。它只是停止加载其余的PHP脚本。我是否需要在php.ini中编辑某些内容? – 2011-03-29 22:31:04
...做到这一点:'session_set_cookie_params(60 * 60 * 24 * 5,“/ app1”);' – Neal 2011-03-29 22:35:55
如果'停止加载',你确定你不只是造成语法错误?另外,在路径中添加一个前导'/'。如果这不起作用,请在'session_start'之前尝试'ini_set('session.cookie_path','/ app1')'。注意:除非你试图对它做一些特殊的事情,否则你不必声明这个域(第三个参数)。 – Wrikken 2011-03-29 22:36:41