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

问题描述:

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

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

我也在想,专业网站如何保持其会话名称的独特性,使其他人永远不会使用它?在我的情况下,会话名称无处不在。

+0

是什么这么快,如果你第一次没有仔细阅读,回答我的问题的真正需要?我已经写了它的原因是使用相同的会话变量名称。我已经知道了。 – user5307298

+0

伟大的等待有一段时间。你会得到好东西给你。 –

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

  1. 为每个项目创建单独的VirtualHost,然后每个项目的会话将是唯一的 - 因为cookie的域是不同的。
  2. 如果你想保持本地主机(我不推荐),你应该想想命名空间为每个项目的会议,比如$ _SESSION [“PROJECT1”] [“UNAME”]

您可以使用退出画面session_unset()然后$_SESSION['uname']将是无效

否则使用特殊名字的uname(也许[ 'UNAME'] [0])

您还可以使用MD5为UNAME $_SESSION[md5("project 1 uname")];$_SESSION[md5("project 1 namespace")]["uname"];

希望我帮了忙。

+0

不,对我来说不是一个满意的答案。我已经告诉我是否已经登录到我的项目1并进入项目2登录。它会直接带给我管理员面板。因为我没有注销我的项目-1。专业网站如何确保其会话名称永远是唯一的,并且永远不会被其他网站使用? – user5307298

+0

他们使用随机字符串,而不是把两个站点放在同一台服务器上 –

+0

是的,但是如何使用随机字符串? – user5307298

这主要是因为您正在为所有项目使用本地主机或同一台主机。请尝试为您的项目设置虚拟主机。

参考设置虚拟主机

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

检查的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();