我运行foo.com。我有两个不同的应用程序,它们位于foo.com:一个是foo.com/bar,另一个是foo.com/example。我使用会话来跟踪用户在登录时的信息,但如果用户从foo.com/bar转到foo.com/example,foo.com/example会看到用户从foo.com/开始的会话。并使用该信息。我的问题是,我怎样才能同时为每个目录进行两个不同的会话?在同一个域中有两个不同的会话
回答
您也可以使用相同的会话,但更改您寻找的变量名称。
编辑:对不起,这并不回答你的问题,但给出了一个替代解决方案。
这似乎是最好的解决方案。谢谢。 – Matthew 2009-08-28 18:23:06
感谢马修:请记住,如果它回答你的问题,请记住标记为'答案':) – user103219 2009-08-28 18:29:40
大多数投票答案更好 - 最好的方法是使用'session_name'。 – joryl 2016-04-04 11:21:52
您可以使用session_set_cookie_params来设置要保存的会话的域和文件夹。 IE:
// Used on foo.com/example
session_set_cookie_params(86400, '/example');
// Used on foo.com/bar
session_set_cookie_params(86400, '/bar');
这似乎不工作;我尝试过之前(并且刚刚再次)没有成功。这可能与我的全局php.ini设置有关。 – Matthew 2009-08-28 18:24:55
您需要 才能将尾部反斜杠添加到路径。没有它,它肯定无法工作。 – 2009-08-28 18:32:43
如果您有权访问php.ini,则可以尝试直接设置'session.cookie_path'参数,因为这是该函数应该覆盖的参数。如果您无权访问php.ini文件,也可以使用ini_set()。 – 2009-08-28 18:33:22
另一种解决方案是通过将“bar_”的foo.com/bar和具有“example_”的foo.com/example的所有会话值预先挂起,在会话中有效地创建一个名称空间。
您可以避免繁琐的方法是将此功能抽象为函数或类方法。例如:
function set_session_value($key, $value) {
//figure out which prefix to use by checking the current working
//directory, or whatever method you like. set $prefix equal to
// "bar_" or "example_".
$_SESSION[$prefix . $key] = $value;
}
然后通过匹配函数获取您的值。
这样做的主要优点是,您不必考虑在/ example中编写/ bar时使用的变量名称。另一个是如果你决定改变你如何存储会话值,你可以很容易地在一个地方改变一切。
您应该在致电session_start之前致电session_name。这设置用于标识会话的cookie的名称(默认情况下,这是PHPSESSID)。
为每个应用程序使用不同的名称。你不应该混淆会话中的变量。
我意识到这是旧的,但认为它可能有助于某人。此示例显示了我们如何为我们的管理区域设置单独的会话。
if ($_SERVER['REQUEST_URI'] == '/admin/'):
$session_name = 'session1';
else:
$session_name = 'session2';
endif;
session_start($session_name);
我认为强调与目前提供的解决方案相关的潜在安全隐患是非常重要的。 我一直是一个Web应用程序渗透测试人员,已经有5年的时间了,并且在这个时候开发了许多易受攻击的安全应用程序,以协助培训从IT安全开始的青少年。
我刚刚测试过提供的解决方案,并注意到它们中没有一个阻止访问属于相邻应用的会话。在session_name()中使用不同的会话标识符名称不会阻止用户使用这些标识符的值。 PHP没有为每个会话标识符名称分隔存储。我有两个应用程序使用不同的会话名称并为浏览器设置了Cookie路径。以下各的Set-Cookie指令都包含在HTTP响应:
Set-Cookie: TESTONE=<value one>; path=/testone/
Set-Cookie: TESTTWO=<value two>; path=/testtwo/
如果同时应用了完全独立的用户,有人只有进入/testtwo/
应用程序,它们可能能够在/testone/
应用程序依赖于访问信息会话参数的处理方式。下面的示例代码段显示了潜在的数据泄露,假设两个应用程序在成功验证后使用$_SESSION["authenticated"]
参数。
<?php
session_name("TESTONE");
ini_set("session.cookie_path","/testone/");
session_start();
if ($_SESSION["authenticated"] == "yes")
echo $topsecretinfo;
?>
要访问此$topsecretinfo
一个只需要在/testtwo/
应用验证,把他们的TESTTWO
会话标识符的价值,将请求发送到/testone/
应用程序时使用它作为TESTONE
会话标识符的值。 PHP的会话查找过程不会识别会话标识的名称,除非解析相应的值。即,“agcy648dja6syd8f93”的会话标识符值将返回相同的会话对象,而不管用于引用它的名称。
- 1. 在两个不同域中的单个会话
- 2. Asp.net会话:两个不同的用户可以访问同一个会话
- 3. 在同一域中的2个iframe中加载同一个会话
- 4. 选择同一列中有两个不同的领域在一个查询,
- 5. 一个rails应用程序,两个域,每个不同的会话
- 6. 同一会话,不同的域,设置会话ID
- 7. 做两个不同的会话得到两个不同的JSP实例
- 8. 在同一会话中的多个WebRequest
- 9. 如何在同一个tensorflow会话中训练不同的LSTM?
- 10. 会话在单个域的不同页面上具有不同的会话ID,非安全页面!
- 11. 在同一页面中有两个不同主题的jQuery对话框
- 12. PHP - 同一个会话
- 13. 从同一个文件(PHP)中写入两个会话
- 14. Zend Framework - 跨多个(不同)域的单个会话
- 15. 当两个相同的应用程序在同一个域上工作时,正确启动会话的方式
- 16. 在C#中为同一类别的另一个会话分配一个会话
- 17. 如何在两个不同的领域搜索两个不同的东西?
- 18. 会话在同一服务器上的多个域上共享
- 19. 会话可以转移到不同的域指向同一个CF实例吗?
- 20. Rails 3 - 同一个控制器,用于两个子域不同的作用域
- 21. 为同一个窗口中的不同选项卡创建不同的会话
- 22. NHibernate:修改两个会话中的实体的不同字段
- 23. 在同一个目录中的两个不同的Git回购
- 24. 为来自同一服务器的不同域设置会话?
- 25. 两个不同类型的关联在同一个两个表中的轨道
- 26. 为什么hibernate会从同一个会话的同一个查询中返回不同的对象?
- 27. 同样cakephp会话为多个域指向相同的目录
- 28. 在同一个动画中使用两个不同的UIViewAnimationCurves
- 29. 如何在同一个ListView中创建两个不同的LinearLayout?
- 30. Apache两个域在两个不同的IP地址
如果我们想在django动力项目中实现相同的功能该怎么办? – Dania 2016-07-24 18:59:50