销毁会话 - 将我退出到当前系统和其他系统

时间:2017-09-05 06:18:54

标签: php

大家好,我只是有一个问题,

在localhost中我有几个系统,当我打开2个或更多系统时,我登录第一个系统,然后另一个系统还没有会话。

但是当我退出其中一个时,所有会话都被销毁了。这是正常的吗? 或者它是一种漏洞?

当您在同一服务器(例如localhost)中销毁某个会话时,它会破坏其中的其他会话吗?

http://localhost/system1    Active Session  $_SESSION['admin']
http://localhost/system2    Active Session  $_SESSION['admin']

我使用session_destroy()注销http://localhost/system1,然后结果为

http://localhost/system1    Inactive Session  
http://localhost/system2    Inactive Session

任何帮助表示赞赏!感谢

4 个答案:

答案 0 :(得分:2)

如果两个系统都使用相同的会话ID(换句话说,它意味着相同的会话文件/实体),那么是的,这是正常的。因为实际上只有一个会话包含来自少数系统的数据。

您的系统可以使用不同的会话,但为此您需要手动生成会话ID(请查看http://php.net/manual/en/function.session-create-id.phphttp://php.net/manual/en/function.setcookie.php以了解如何更改Cookie路径)。

在您的情况下,最简单的解决方案是从会话中取消设置系统数据(在注销时),然后不会删除其他系统数据。

答案 1 :(得分:1)

为主机而不是子文件夹设置会话。 创建会话时,会在 localhost 上创建会话, 现在,会话变量可以由system1和system2访问,

使用 session_destroy(); 会破坏主机的会话。所以删除所有会话引用。

我认为您希望特别取消设置特定网站的变量。所以用这个。

unset($_SESSION['system1session']);

希望有所帮助

答案 2 :(得分:1)

会话在主机上销毁,

如果您使用的是Apache,则可以使用虚拟主机创建本地域。然后访问example.local或example2.local

上的每个站点
<VirtualHost *:80>
    DocumentRoot "/www/example1"
    ServerName www.example.local

    # Other directives here
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/www/example2"
    ServerName www.example2.local

    # Other directives here
</VirtualHost>

有关此内容的更多信息:https://httpd.apache.org/docs/current/vhosts/examples.html

或者您可以尝试使用PHP内置Web服务器,在一个文件夹的Web根目录中运行php -S localhost:8000,在另一个文件夹中运行php -S localhost:8001。然后,您可以在http://localhost:8000http://localhost:8001上访问它们。虽然没有测试过这个。

http://php.net/manual/en/features.commandline.webserver.php

另一种选择是使用命名会话http://php.net/manual/en/function.session-name.php

答案 3 :(得分:1)

您可以为每个会话使用不同的名称。

PHP有一个会话名称功能,它指定Cookie的名称,因此两个不同的名称将具有自己的范围和ID。

一个文件:

session_name("ServerApp1"):;
session_start();

$_SESSION["a"] = ...

其他档案:

session_name("ServerApp2"):;
session_start();

$_SESSION["a"] = ...

使用这种方法,您可以在一个文件中销毁Session,而另一个文件则不受影响。