我目前正在开发两个网站,并通过连接到localhost
进行调试。
第一个网站引用http://localhost/web1
,第二个网站引用http://localhost/web2
。
我为每个创建了一个登录脚本,其中设置了三个特定于域的会话变量,例如:
$_SESSION['web1_user']
$_SESSION['web1_login']
$_SESSION['web1_sessionID']
但是,当我在相同浏览器上登录两个网站时,请退出一个网站(触发{{1}我也会自动退出第二个网站。
我非常感谢任何关于如何解决这个问题的想法。 :(
答案 0 :(得分:9)
要解释为什么这很重要,您必须了解以下内容:
Session
个变量存储在服务器上,服务器上有一个键控引用,浏览器上有一个cookie。一旦你取消并销毁两者中的任何一个,就不能再进行一场比赛了 - 你的会话就不见了!
session_start();
session_unset();
session_destroy();
以上内容将终止将服务器链接到浏览器的所有会话变量(在服务器端)。
轻松管理这种方法的方法是将会话变量转换为另一组数组:
$_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']);
在这种情况下,您为每个站点创建了一个单独的会话管理系统(使用二维数组,其顶层由您站点的标识符键控)。这样就可以让每个站点管理一组单独的会话变量 - 当你销毁一个会话变量时,你就不会触及其他变量。
但是,我将建议改为使用不同的浏览器(或者另外)......
答案 1 :(得分:3)
我最近解决了与您的问题相关的问题。最初,我正在寻找类似于你所描述的实现,并且经过相当多的搜索 - 这就是我想出的:
网站1 :
ini_set("session.cookie_domain", "yourdomainname");
$some_name = session_name("some_name");
$domain = 'your domain name';
session_set_cookie_params(0, "/", $domain);
session_start();
$_SESSION['user']=$_POST['user'];
$_SESSION['password']=$_POST['password'];
网站2 :
$some_name = session_name("some_name");
ini_set('session.cookie_domain', 'yourdomainname');
session_start();
echo $_SESSION['user'];
echo $_SESSION['password'];
这种改变对我来说效果很好 - 我的猜测是它也会帮助你。
答案 2 :(得分:1)
使用
session_name('web1');
之前session_start();
答案 3 :(得分:0)
在每个应用中设置不同的会话名称,via session_name()
或via session.name
。
答案 4 :(得分:0)
你可以用这个
ini_set("session.cookie_domain", ".example.com");
答案 5 :(得分:0)
您需要为不同的网站制作不同的主机
在这种情况下,您有两个站点在同一主机上运行,名为localhost,因此共享相同的主机名会话。
答案 6 :(得分:0)
在第二个域中包含会话开始的文件。
web1包含会话开始文件,web2包含('../ web1 / session.php');
答案 7 :(得分:-1)
您可以在所有网站中使用不同的会话名称,例如您使用的第一个网站$_SESSION['web1_user'], $_SESSION['web1_login'], $_SESSION['web1_sessionID']
,然后使用您可以使用的第二个网站$_SESSION['web2_user']
我已经面临这个问题并使用不同的会话名称解决了这个问题。
答案 8 :(得分:-2)
Bez会话在同一个浏览器中共享,因此如果您从一个选项卡注销,其他选项卡将被注销,
示例:我在Chrome中登录,并在另一个Chrome中打开,会话已共享,因此如果我从一个登出,则另一个会自动注销!