php - 如何使用 php 管理同一主机上两个不同网站的单独 session 状态

标签 php session-variables session-state session-cookies

我目前正在开发两个网站,并通过连接到 localhost 来调试它们。

第一个站点用 http://localhost/web1 引用,第二个站点用 http://localhost/web2 引用。

我为每个创建了一个登录脚本,其中设置了三个特定于域的 session 变量,例如:

  1. $_SESSION['web1_user']
  2. $_SESSION['web1_login']
  3. $_SESSION['web1_sessionID']

但是,当我在同一浏览器上登录到两个站点时,然后注销一个站点(触发 session_destroy(),我也会自动退出 second 站点。

如果您有任何关于如何解决此问题的想法,我们将不胜感激。 :(

最佳答案

啊哈,共享托管的乐趣! 最好的办法就是在您实际需要同时登录两个站点时,为每个站点使用不同的浏览器...

但是,要解释为什么这很重要,您必须了解以下内容:

Session 变量存储在服务器上,在服务器上有一个键控引用,在您的浏览器上有一个 cookie。一旦你取消设置并销毁两者中的任何一个,就无法再进行匹配 - 你的 session 就结束了!

session_start();
session_unset();
session_destroy(); 

以上将杀死所有将服务器链接到您的浏览器的 session 变量(在服务器端)。

轻松管理的方法是将 session 变量放入另一组数组中:

$_SESSION["site1"] = array( $user_id, $session_id );
$_SESSION["site2"] = array( $user_id, $session_id );

你当然可以让它变得花哨:

$_SESSION['site3']['userID']    = 'someuserid';
$_SESSION['site3']['sessionid'] = 'somesessionid';

然后当您从站点 1 注销时

session_start();
unset($_SESSION['site1']);

在这种情况下,您已经为每个网站创建了一个单独的 session 管理系统(使用二维数组,其顶层由您网站的标识符作为键)。这使得每个站点都管理一组单独的 session 变量 - 当您销毁一个变量时,您不会触及其他变量。

但是,我真的会推荐使用不同的浏览器来代替(或另外)...

关于php - 如何使用 php 管理同一主机上两个不同网站的单独 session 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890360/

相关文章:

php - Laravel Blade 性能

php - 在字符串中选择从位置到行尾

php - 使用 MySQL 数据库中的数据创建列表

ruby-on-rails - 如何在 Ruby on Rails 3.2.8 中将数据保存到 LocalStorage?

javascript - 如何使用 JavaScript 检查 Session 是否过期

php - CakePHP 中没有 SQL 模型

struts2 - struts2中如何设置和销毁 session 变量?

javascript - 通过 AJAX 将 session 变量传递给 PHP 文件

asp.net - 如何在长时间请求处理期间保持 ASP.NET session ?

c# - 这个 "singleton"在 ASP.NET 应用程序中应该是线程安全的吗?