Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:用户登录会话和cookie_Php_Session State_Session Cookies - Fatal编程技术网

PHP:用户登录会话和cookie

PHP:用户登录会话和cookie,php,session-state,session-cookies,Php,Session State,Session Cookies,对不起,我是新手!我正在制作一个小网站,允许用户创建自己的帐户。这不是一个银行系统,也不太可能有人想入侵它。这就是说,我正试图使它合理地安全,因为有很多无聊的脚本孩子在那里 有人能描述一个用户登录的基本工作流程,并且有一个cookie集可以让他们登录30天吗 目前,我有以下几点: 验证和清理输入的数据 根据数据库中的bcrypt哈希密码检查提供的凭据 如果正确,则调用“登录”功能 登录功能: a。使用userID从数据库中删除任何会话数据(表中有两列:SessionString和userI

对不起,我是新手!我正在制作一个小网站,允许用户创建自己的帐户。这不是一个银行系统,也不太可能有人想入侵它。这就是说,我正试图使它合理地安全,因为有很多无聊的脚本孩子在那里

有人能描述一个用户登录的基本工作流程,并且有一个cookie集可以让他们登录30天吗

目前,我有以下几点:

  • 验证和清理输入的数据

  • 根据数据库中的bcrypt哈希密码检查提供的凭据

  • 如果正确,则调用“登录”功能

  • 登录功能:

    a。使用userID从数据库中删除任何会话数据(表中有两列:SessionString和userID)。
    B将新会话数据添加到DB(新的随机生成的字符串和用户ID)。
    C将随机生成的字符串和用户ID写入cookie。
    D使用
    $UserID
    设置
    $\u会话(“UserID”)

  • 但是,尽管正在创建并写入这两个cookie,
    $\u会话(“UserID”)
    仍然为空。。。我猜是因为我不能在任何时候写
    $\u SESSION

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

    再次为这个新手问题道歉


    更新:

    是的,我确实理解
    $\u会话
    变量和cookie之间的区别。我在每页的顶部都有
    session\u start()
    (就在
    之后)您是否编写了一个自定义会话处理程序,将会话文件存储在数据库中?我想您没有

    如果要使用
    $\u SESSION
    ,还必须执行
    SESSION\u start()
    。使用PHP会话时,将为您设置用于标识用户的cookie。您还将在/tmp目录中创建会话文件。这是变量的位置,您分配给
    $\u SESSION
    的任何内容都将被存储

    除非您定义一个自定义会话处理程序来管理会话文件的位置,否则您不需要查询数据库。只需将用户凭据保存在
    $\u session
    中即可


    PS:您可以像这样访问数组:
    $\u SESSION[“UserID”]
    ,而不是使用
    ()

    您可能想看看这篇文章,在这篇文章中,我已经讨论了各种类型的会话劫持以及如何避免它


    首先,会话和cookie之间有一个重要区别。当您使用
    $\u会话[“.”]
    时,您正在创建一个会话(与驻留在客户端的cookie相比,会话驻留在服务器上),即使浏览器使用cookie跟踪会话id。要创建cookie,您将使用该方法

    也就是说,我建议您通读这本书,它是一本关于如何创建安全登录脚本的分步指南,使用cookie的持久性来实现“记住我”功能。详细描述如何实现这一点,恐怕要获得如此广泛的答案

    旁注:


    为了能够写入会话,您可能必须在使用
    $\u session[“.”获取或设置会话变量之前调用
    session_start();

    我不确定您是否已经这样做了..但是您是否已经完成了setcookie?如果是,那么使用$\u COOKIE您可以访问信息并完成登录部分。在执行setcookie时,您可以将过期时间设置为30天。我已经更新了我的原始问题。我已经完成了
    会话\u start()
    在顶部,但由于某些原因,某些会话变量没有被设置。Argh@DjangoReinhardt因为我们在问题中没有看到这部分代码,所以这是一个有点难解决的问题,但是如果一些会话变量被设置,而另一些没有设置,我的第一个猜测是您将会话变量名
    UserID
    拼错了,比如
    userId
    userId
    或类似的东西-因为变量名区分大小写。是的,这是一个奇怪的名称,但它位于代码的不同部分。我会继续挖掘。谢谢你的帮助。
    <?php
    session_start();
    
    if(!isset($_SESSION['initiated'])) {
        session_regenerate_id();
        $_SESSION['initiated'] = true;
    }