PHP:用户登录会话和cookie

时间:2012-02-24 16:22:39

标签: php session-state session-cookies

抱歉新手问题!我正在建立一个小网站,允许用户创建自己的帐户。它不是一个银行系统,并且不太可能有人想破解它。也就是说,我试图让它合理安全,因为那里有很多无聊的脚本小子。

有人可以为用户登录并设置一个cookie集来描述一个基本的工作流程,以便让他们登录30天吗?

目前我有以下内容:

  1. 验证并清理输入的数据。
  2. 根据数据库中的bcrypt哈希密码检查提供的凭据。
  3. 如果正确则调用“登录”功能。
  4. 登录功能:

    一个。使用userID删除DB中的任何会话数据(包含两列的表:SessionString和UserID) 湾将新会话数据添加到DB(newy随机生成的字符串和UserID) C。将随机生成的字符串和UserID写入cookie d。将$_SESSION("UserID")设为$userID

  5. 但是虽然正在创建和写入两个cookie,$_SESSION("UserID")仍然是空白的...我猜是因为我不能随时写信$_SESSION

    即使修复过,我如何使用存储在cookie中的数据来记录用户?我猜我不想在每个页面加载时去DB。它仍然需要我创建一个数据库对象来查看cookie中的凭据是否正常。这是正确的方法吗?

    再次为新手问题道歉!


    更新
    是的,我确实理解$_SESSION变量和cookie之间的区别。我在每个页面的顶部都有session_start()(在<php之后没有空行)。 $_SESSION("UserID")只是空白。

    以下是页面顶部的代码:

    <?php
    session_start();
    
    if(!isset($_SESSION['initiated'])) {
        session_regenerate_id();
        $_SESSION['initiated'] = true;
    } 
    

    感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您是否编写了一个自定义会话处理程序,其会话文件存储在数据库中?我猜你没有。

如果您想使用$_SESSION,您还必须session_start()。使用PHP会话时,将为您设置用于标识用户的cookie。您还将获得在/ tmp目录中创建的会话文件。这是您的变量以及您分配给$_SESSION的任何内容的位置。

除非您定义自定义会话处理程序,它将管理会话文件的位置,否则您无需查询数据库。只需将用户凭据保存在$_SESSION

See this Tutorial on how to use PHP sessions.

PS:你可以访问这样的数组:$_SESSION["UserID"],而不是()

答案 1 :(得分:1)

您可能希望查看本文,其中我已经讨论了各种类型的会话劫持以及如何避免它。

session security in php

答案 2 :(得分:1)

首先,会话和cookie之间存在重要差异。当您使用$_SESSION[".."]创建会话(它存在于服务器上,与客户端上的cookie相比)时,即使浏览器使用cookie来跟踪会话ID。要创建Cookie,您可以使用setcookie()方法。

那就是说,我建议你仔细阅读this article,这是一个关于如何创建安全登录脚本的循序渐进指南,使用cookie来持续使用&#34;记住我&#34 34; -feature。详细描述如何做到这一点将是广泛的SO答案我害怕。

旁注:

为了能够写入会话,您可能需要在使用session_start();获取或设置会话变量之前致电$_SESSION[".."]