在同一个域中,我有两个正在运行的应用程序
localhost/app1
localhost/app2
这是我的会话管理:
用于检查登录的页面:
session_start();
//...check if the login is correct
//if is correct
$_SESSION["SESSION_VALID"] = true;
//redirect to the correct page
//if is not correct
$_SESSION["SESSION_VALID"] = false;
//redirect to the login
我的申请页面:
//check the session
session_start();
if(!$_SESSION['SESSION_VALID']){
//redirect to login page
header("Location: ../../login/");
exit;
}
登出页面:
session_start();
session_unset();
session_destroy();
//redirect to the login
header("Location: ../login/");
现在,回到最初的问题。我已经阅读了有关此问题的有关堆栈溢出的几个问题。解决的办法是使用session_name("app1")
before every session_start()
。
好的,但是现在的问题是另一个:当我从一个应用程序中注销时,如何设置应该销毁哪个会话?只是session_name("app1")
在会议结束之前打电话?是正确的解决方案?像那样的东西?
session_name("name_of_the_session_to_destroy");
session_start();
session_unset();
session_destroy();
header("Location: ../login/");
似乎您在同一个域上有两个应用程序,但希望完全彼此独立地运行两个会话。您发现注销一个应用程序会使用户注销另一应用程序,但是您不希望这种情况发生。
解决方案是将会话cookie设置为仅对每个应用程序的域的目录部分有效。默认情况下,会话扩展到整个域,这就是为什么在一个应用程序中破坏会话也会影响另一应用程序的原因。
例如,要登录应用程序1,请在会话开始时执行以下操作:
session_set_cookie_params (60 * 30, '/app1');
当然,您将需要检测您所在的应用程序,并相应地提供正确的路径组件。您可以从$_SERVER
变量中获取。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句