10

我目前正在开发两个网站,并通过连接到localhost.

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

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

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

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

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

4

9 回答 9

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

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

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

于 2012-10-30T00:37:36.093 回答
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'];

这种改变对我来说效果很好——我猜它也会对你有所帮助。

于 2012-10-15T06:44:26.360 回答
1

采用

session_name('web1');

session_start();

于 2012-10-15T06:37:09.170 回答
0

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

于 2012-10-15T06:32:34.727 回答
0

你可以用这个

ini_set("session.cookie_domain", ".example.com"); 
于 2012-10-15T06:33:45.990 回答
0

您需要为不同的站点制作不同的主机

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

于 2012-10-15T06:46:40.117 回答
0

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

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

于 2012-10-15T07:11:53.523 回答
-1

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

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

于 2012-10-15T06:36:29.793 回答
-2

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

示例:我登录 Chrome,然后在另一个 Chrome 中打开,会话是共享的,所以如果我从其中一个注销,另一个会自动注销!

于 2012-10-15T06:31:42.993 回答