繁体   English   中英

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

[英]How can I manage separate session states for two different websites on the same hosting using php

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

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

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

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

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

关于如何解决这个问题的任何想法都将非常感激。 :(

啊,共享主机的乐趣! 最好的办法是,只要您实际需要同时登录到两个站点,就可以为每个站点使用不同的浏览器...

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

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

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'];

这种改变对我很有用 - 我的猜测是它也会对你有所帮助。

使用

session_name('web1');

session_start();之前session_start();

通过session_name()session.name在每个应用程序中设置不同的会话名称。

你可以用它

ini_set("session.cookie_domain", ".example.com"); 

您需要为不同的站点创建不同的主机

在这种情况下,您有两个站点在同一主机上运行,​​名为localhost,因此共享相同的主机名会话。

在第二个域中包含会话开始的文件。

web1包含会话开始文件,web2包含('../ web1 / session.php');

您可以在所有网站中使用不同的会话名称,例如您使用的第一个网站$_SESSION['web1_user'], $_SESSION['web1_login'], $_SESSION['web1_sessionID']然后第二个网站您可以使用$_SESSION['web2_user']

我已经面临这个问题并使用不同的会话名称解决了它。

Bez会话在同一浏览器中共享,因此如果您从一个选项卡注销,其他选项卡将被注销,

示例:我在Chrome中登录,并在另一个Chrome中打开,会话已共享,因此如果我从一个登出,则另一个会自动注销!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM