【问题标题】:PHP session for user authentication用于用户身份验证的 PHP 会话
【发布时间】:2012-08-30 02:58:28
【问题描述】:

我将使用 cookie 和会话来识别用户。因此,仅当用户选择“不要记住我”选项时才会使用会话。 我在网站每个页面的顶部都包含了识别文件。 用户会话看起来像$_SESSION['user']

我的问题是:

我必须在身份验证文件中放置session_start() 指令吗?我问它是因为每次我使用此指令时都会创建新会话。

更新 http://pastebin.com/Nh3zj6mR用户识别脚本

【问题讨论】:

  • session_start() 创建新会话或恢复旧会话 - 除非您在调用此 session_start() 之前执行了某些操作。然后我认为它总是会开始一个新的......
  • 你能发布一些代码吗?只有cookies不是很安全...
  • @John 你能解释一下原因或提供一个很好的资料来阅读它吗?
  • if (isset($_COOKIE['rwt'])) { $QH=$this->_DBH->prepare("SELECT * FROM accounts WHERE cookie=:cookie_value"); 您可以简单地将 cookie 编辑为另一个用户名,就可以了。最好使用某种散列,将其存储在 cookie 中,然后使用该散列从数据库中获取所需的数据。还将该 cookie 绑定到一个 IP 地址。
  • @John pastebin.com/aQEzzPJM 我以这种方式创建 cookie 值,而不是将其插入数据库

标签: php session authentication


【解决方案1】:

是的,你必须将 session_start() 放在每个 php 页面的顶部(在生成任何输出之前,之前必须没有发送任何标题)告诉 php接受 / 开始会话,希望您的 php.ini 已设置,会话 会自动启动。

我问它是因为每次我使用此指令时都会创建新会话。

这是一个提示,您的浏览器会忽略(禁止)会话 cookie

【讨论】:

  • 即使用户的cookie存在,会话开始正常吗?
  • 请向我们展示您的逻辑(代码)......然后我们可以更多地了解“故障”
  • 对不起...但是在您的代码中您会得到一个布尔结果...修改您的代码并让显示哪个 false 被触发...示例第 10 行“返回 true;”修改它以在 echo "false in ".__LINE__." return false";die(); 中转储
  • 抱歉,但在这段代码中,我检查是否存在具有此 cookie 或会话的用户,并且它应该有一个布尔结果:)
【解决方案2】:

除非您执行session_start(),否则PHP 的会话机制将不会 激活。 $_SESSION 将存在,您将能够读取/修改它,但它的值不会被持久化 - 例如...当脚本退出时内容将丢失。

如果您在每个使用会话数据的脚本中运行 session_start(),但没有显示会话数据,则可能是配置错误导致会话 cookie 丢失,并且 PHP 每次都在创建一个新会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2016-02-22
    • 2020-10-06
    • 2019-05-17
    • 2011-09-27
    相关资源
    最近更新 更多