PHP中的其他项目也可以访问由一个项目创建的会话

时间:2016-02-26 05:38:16

标签: php session

在我的一个localhost项目中,为用户登录创建了一个会话。它存储在$_SESSION['uname']中。我的其他项目也使用相同的会话名称变量。问题是当我已经登录到我的第一个项目管理区域然后我去了我的其他项目管理区域时,它并没有要求我输入登录窗口的凭据;相反,它直接将我带到管理面板。我知道这是因为在我的各种项目中使用相同的$_SESSION['uname']。所以我想知道我们如何强制其他项目显示登录窗口,虽然我已经登录了我的第一个项目?

我的其他项目也可能有一些不同的登录凭据,但如果我已登录我的第一个项目,我将永远不会提供登录屏幕。

我也在考虑专业网站如何保持其会话名称的独特性,以便其他人永远不会使用它?在我的情况下,会话名称随处可访问。

4 个答案:

答案 0 :(得分:1)

看起来您正在为本地的每个项目使用localhost。

  1. 为每个项目创建单独的VirtualHost,然后会话对每个项目都是唯一的 - 因为cookie的域名不同。
  2. 如果你想保留localhost(我不推荐),你应该考虑每个项目会话的命名空间,比如$ _SESSION ['project1'] ['uname']

答案 1 :(得分:0)

您可以在退出屏幕中使用session_unset(),然后$_SESSION['uname']将为空

否则使用uname的特殊名称(可能是['uname'] [0])

您还可以将md5用于uname $_SESSION[md5("project 1 uname")];$_SESSION[md5("project 1 namespace")]["uname"];

希望我帮助过。

答案 2 :(得分:0)

这主要是因为您为所有项目使用localhost或相同的主机。尝试为您的项目设置虚拟主机。

请参阅设置虚拟主机的链接

https://httpd.apache.org/docs/2.2/vhosts/examples.html

答案 3 :(得分:0)

检查php.ini session.cookie_domain指令,指定会话cookie中的域集。

或者您可以查看session_set_cookie_params功能。它具有$domain参数,用于设置可访问会话cookie的域。

例如,将会话Cookie设置为只对mywebsite.com

可见
<?php

session_set_cookie_params(3600, '/', 'mywebsite.com');

session_start();