两个用户可以共享相同的浏览器和网站,但是拥有不同的会话吗? - php

This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center。

7年前关闭。

尽管它可能不经常发生,但有可能是UserA登录并具有活动会话。然后,用户B拿起笔记本电脑,并希望使用同一站点。在PHP中,可以对此进行测试并允许它,或者每个会话只有一个用户。

我遇到的示例是在测试时,我有userA登录到他们的个人资料,然后为userB我单击了一个链接以重置他们的密码,但是我没有点击密码重置页面,而是被重定向到userA的个人资料页面。这就是我的编码方式,但是我想知道是否这些天我与家人一起在笔记本电脑上为每个人使用,我是否应该设计一种方法给每个人自己的会话,例如电子邮件链接?

编辑:我决定完全放弃这个想法。我将它留给用户以保护他们的会话。

参考方案

我只是在发布此内容以展示它是如何可能的,但我强烈建议您甚至不要尝试使用此技术。它打开了整个安全问题的世界,它所带来的问题将完全消灭您可以为用户提供的任何次要便利。

话虽如此,您可以使用PHP的trans_sid(“透明会话ID”)支持,该会话ID自动嵌入到URL中并作为隐藏的表单字段。这样一来,您可以打开多个窗口,每个窗口都有自己的会话,而无需在窗口之间共享。

基本上,您将关闭基于cookie的会话并仅使用透明ID:PHP将自动修改<a href="...">以将会话ID参数添加到查询字符串中,并根据需要插入隐藏的表单字段。它不适用于JS代码等,但是您可以在此处自己添加ID。

但是,这是问题所在:现在,会话ID已嵌入到URL和表单中,在站点上添加页面书签后,该书签将与当时正在使用的特定会话相关联。剪切'n粘贴URL共享内容也将把用户的会话传输给向其发送链接的任何人。单击从您的站点到外部世界的任何链接将传输会话ID作为引荐来源网址的一部分。例如您刚刚使会话劫持变得微不足道,因为用户每次执行操作时都会从屋顶大喊会话ID。

更简单的解决方案:使用浏览器的“色情模式”,以便每个窗口都有自己的cookie存储,将每个用户的窗口/会话与其他用户分开。

php session header()重定向后丢失 - php

这是我第一次尝试创建会话。另外,成功登录后,我使用header()函数重定向页面,但是在重定向的页面上,我不再有会话。有代码:建立工作阶段:function userLogin($user){ session_start(); $_SESSION['username'] = $user; header("Location: /~…

PHP Memcached会话突然失效 - php

session.save_handler = memcached session.save_path = "127.0.0.1:11211" session.gc_maxlifetime = 86400 其余的标准。我希望自上次用户访问该页面以来,该会话至少可以保留86400秒,即,如果我在5分钟后启动了一个会话并访问了该页面,则该会话应…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

PHP:检查目录是否为空的最佳和最简便的方法是什么 - php

Improve this question 我有一个包含数百个动态生成文件夹的根目录。随着时间的流逝,在这些目录必须为空的情况下,需要从系统中删除其中一些文件夹。实现这一目标的最佳的最短,最简单和/或最有效的方法是什么? 参考方案 使用glob:if (count(glob("path/*")) === 0 ) { // empty gl…