同一域中有两个不同的 PHP 会话,如何只销毁其中一个?
Two different PHP sessions in same domain, how to destroy only one of them?
在同一个域中我有两个应用程序运行
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/");
现在,回到最初的问题。我已经阅读了与此问题相关的 Stack Overflow 上的几个问题。解决方案是在每个 session_start()
.
之前使用 session_name("app1")
好的,但现在问题是另一个:当我从其中一个应用程序注销时,如何设置应该销毁哪个会话?只是在会话销毁之前调用 session_name("app1")
?是正确的解决方案吗?类似的东西?
session_name("name_of_the_session_to_destroy");
session_start();
session_unset();
session_destroy();
header("Location: ../login/");
在注销按钮 url 中,您可以提供一个 GET 参数,如 ?app=1 或 ?app=2,这样您就知道要关闭哪个应用程序。如果您知道应用程序的会话名称,您可以使用以下命令关闭它:
您可以使用 unset($_SESSION['SESSION_NAME']);
取消设置特定会话。
您似乎在同一个域中有两个应用程序,但想要完全独立地操作两个会话。您发现注销一个应用程序会使用户注销另一个应用程序,但您不希望这种情况发生。
解决方法是设置session cookie只对每个app的domain目录部分有效。默认情况下,会话扩展到整个域,这就是为什么在一个应用程序中销毁会话也会影响另一个应用程序。
例如,要登录应用程序 1,请在会话开始时执行此操作:
session_set_cookie_params (60 * 30, '/app1');
当然,您需要检测您所在的应用程序,并相应地提供正确的路径组件。您可以从 $_SERVER
变量中获取它。
在同一个域中我有两个应用程序运行
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/");
现在,回到最初的问题。我已经阅读了与此问题相关的 Stack Overflow 上的几个问题。解决方案是在每个 session_start()
.
session_name("app1")
好的,但现在问题是另一个:当我从其中一个应用程序注销时,如何设置应该销毁哪个会话?只是在会话销毁之前调用 session_name("app1")
?是正确的解决方案吗?类似的东西?
session_name("name_of_the_session_to_destroy");
session_start();
session_unset();
session_destroy();
header("Location: ../login/");
在注销按钮 url 中,您可以提供一个 GET 参数,如 ?app=1 或 ?app=2,这样您就知道要关闭哪个应用程序。如果您知道应用程序的会话名称,您可以使用以下命令关闭它:
您可以使用 unset($_SESSION['SESSION_NAME']);
取消设置特定会话。
您似乎在同一个域中有两个应用程序,但想要完全独立地操作两个会话。您发现注销一个应用程序会使用户注销另一个应用程序,但您不希望这种情况发生。
解决方法是设置session cookie只对每个app的domain目录部分有效。默认情况下,会话扩展到整个域,这就是为什么在一个应用程序中销毁会话也会影响另一个应用程序。
例如,要登录应用程序 1,请在会话开始时执行此操作:
session_set_cookie_params (60 * 30, '/app1');
当然,您需要检测您所在的应用程序,并相应地提供正确的路径组件。您可以从 $_SERVER
变量中获取它。