【问题标题】:Working with sessions when cookies are disabled?在禁用 cookie 时使用会话?
【发布时间】:2012-12-02 19:49:20
【问题描述】:

我必须创建一个时间表系统,并且我在页面中进行了登录,但随后我需要使用会话来了解谁的登录以及他们是否仍然登录但 cookies 必须被禁用所以我有尝试将SessionID 保存到MySQL 数据库,但我不知道如何在另一个页面上检索该会话ID,所以任何想法都会有所帮助?不确定我是否也完全正确

【问题讨论】:

  • 您能否给出一个理由,为什么必须禁用 cookie?传递 session-id 的其他方法是不安全的并且容易受到会话劫持。即使是严格的浏览器设置通常也允许短期会话 cookie(关闭浏览器后删除),它们与永久 cookie 不同。
  • 刚刚被要求制作一个可以在禁用 cookie 时使用的系统

标签: php html session cookies sessionid


【解决方案1】:

您需要通过 url 传递会话 ID,如下所示:

http://local.domain/index.php?sessionID=7387837rhdfjfytyfegwfvkewbf

显然,上述GET 请求使会话ID 相当明显。实际上,在正常情况下,只有用户自己会看到它。因此,安全隐患并不是非常糟糕,但它们存在于恶意软件中,以欺骗会话。

使用此方法的提示:

  • 不要使用增量 sessionID (100, 101, 102) - Generate random ID's
  • 虽然您可以在每个页面上使用 POST 请求,但它无助于安全,并且可能会让您的用户感到不安/反感(考虑按下返回按钮)
  • 仍然在数据库中维护您的会话,使用来自 $_GET 的唯一会话 ID 作为键
  • 确保会话超时,并且快速。每次刷新时更新 last_access 时间,以确保活动用户不会超时。

【讨论】:

  • 那是错误的方式。 Bcoz 最好不要显示您的会话 ID。它应该被隐藏起来。它可能被用于黑客攻击。如果你想使用你的会话 ID,为什么不在页面顶部使用 session_start()。
  • @anujarora PHP 将其会话 ID 存储在 cookie 中。如果 cookie 被禁用,那么您将无法存储会话 ID。这使得通过 url 传递它成为唯一可行的选择。我同意它不安全,但session_start(); 与这个问题无关。无论是否启用 cookie,您都需要这样做。
  • 好的,我明白了。和 session_start();没用。但我还是要说,这不是一个好的选择。您可以将其作为 post 值传递,也可以发送存储会话的 id,也可以加密 sessionID。
  • POST 值不再安全,它们只是不那么可见。加密sessionID 也不会使其更安全。加密与否,它仍然是可以用来解锁前门的钥匙。
  • 我曾想过这样做,但就像 cmets 所说的那样,它不是很安全,我认为如果我使用数据库会是一个更好的系统
猜你喜欢
  • 1970-01-01
  • 2011-07-23
  • 2011-04-29
  • 1970-01-01
  • 2010-12-20
  • 2014-11-29
  • 2012-07-08
  • 2010-10-11
  • 1970-01-01
相关资源
最近更新 更多