Php “中的Cookie和会话”;“记住我”;特征

Php “中的Cookie和会话”;“记住我”;特征,php,session,cookies,session-cookies,remember-me,Php,Session,Cookies,Session Cookies,Remember Me,我从来都不想让用户登录任何时间,所以我从来没有看到“记住我”功能的用处。我开始思考这是怎么做到的,我想澄清一下 我目前正在数据库中存储会话。一直困扰我的是,即使我没有明确设置cookie,但如何在浏览器中放置cookie。我有点困惑,因为会话就是会话,cookie就是cookie。我不知道会话如何设置cookie 我还想知道,仅仅在会话数组中设置另一个会话变量以保持用户登录是否足够,还是我仍然需要设置cookie?为了从数据库中提取会话数据,需要密钥。这称为会话ID 会话ID需要存储在某个地方。

我从来都不想让用户登录任何时间,所以我从来没有看到“记住我”功能的用处。我开始思考这是怎么做到的,我想澄清一下

我目前正在数据库中存储会话。一直困扰我的是,即使我没有明确设置cookie,但如何在浏览器中放置cookie。我有点困惑,因为会话就是会话,cookie就是cookie。我不知道会话如何设置cookie


我还想知道,仅仅在会话数组中设置另一个会话变量以保持用户登录是否足够,还是我仍然需要设置cookie?

为了从数据库中提取会话数据,需要密钥。这称为会话ID

会话ID需要存储在某个地方。作为客户端发回的URL字符串的一部分,或者更常见的是,在客户端的cookie中。当发送请求时,会话从cookie中读取值,并知道从会话存储中提取哪个记录

这是自动发生的

使用会话的唯一原因是如果要保留的数据大于4KB(浏览器限制);或者,从服务器中提取数据所需的时间大于从会话存储中读取数据所需的时间

如果您存储的数据量小于4KB,我强烈建议您首先在cookie中设置它。我通常会存储一些东西,比如用户id、用户名和一些其他属性。请记住,检查cookies值是很简单的,因此在发送到客户端之前,应该对这些信息进行加密

另一件事是,如果从原始源中提取所需数据的查询时间很短,则选择这样做,而不是将其放在会话中。这样的话,你只有在你真正需要的时候才能得到它,而不是在每次加载页面时

一直困扰我的是,即使我没有明确设置cookie,但如何在浏览器中放置cookie

会话处理程序必须标识哪个会话属于哪个用户

绝大多数会话库都是通过设置cookie来实现的

(是)在会话数组中设置另一个会话变量以保持用户登录就足够了,还是我仍然需要设置cookie


大多数会话库设置会话cookie。这些是没有指定过期时间的cookie。它们在浏览器关闭时过期,并且不足以实现“记住我”功能(预计在浏览器重新启动时会一直存在,因此必须有明确的过期时间)。

解释Cookie和会话之间的关系:

PHP使用Cookie为每个用户唯一地标识会话。这是唯一更可靠的方法,因为每次从服务器请求文件时都会发送cookie。使用cookie中的令牌(也是会话标识符),PHP将查找tmp目录以查看会话是否存在。如果会话存在,变量将从正确的文件加载,您将能够访问该会话上的变量


因此,Cookie存储会话标识符,该标识符是标识哪个用户使用哪个会话所必需的。会话劫持也是这样发生的,人们可以更改会话标识cookie以使用另一个人的会话标识符。

底层PHP会话实现设置cookie。您可以对此进行更改,并在查询字符串中传递会话ID值,但我不建议这样做。您不使用cookie,PHP使用cookie。它引用存储在cookie中的会话ID值来执行会话数据的查找

我还想知道,仅仅在会话数组中设置另一个会话变量以保持用户登录是否足够,或者我是否仍然需要设置cookie


一旦用户关闭浏览器,会话将被终止,cookie将被删除。我不认为存在任何机制来保持会话值,这是有充分理由的。

谢谢。我当前正在数据库中保存会话id。我已经验证了cookie中的相同会话id与数据库中的相同。我是否仍然需要设置cookie,或者我是否可以向会话数组添加另一个值并进行检查?查看我的更新。通常在登录时,我将用户id存储在加密的cookie中,并且根本不使用会话。当我拿回饼干时,我知道他们是否登录了。当我在想这个问题的时候,克里斯,让我再问你一个问题。昨天我注意到我可以修改浏览器上的一个cookie。这不是一个安全问题吗?现在,在加密的cookie上,是否已经有一个函数可以执行此操作,或者我需要自己滚动?Residuum,这是我目前知道的,可能是我无法理解的地方。我的数据库保存所有登录用户的会话ID。当用户返回时,我可以检查我的会话存储在他们的计算机上设置的cookie;如果设置了,则他们可以继续,否则返回登录页面。我遗漏了什么?顺便说一句,修改cookies不被认为是安全问题。基本上没有办法知道你是否可以信任客户端(或者你和它之间)的东西。这就是为什么您应该始终加密cookie。更具体地说,cookie被删除,会话超时。在服务器端,您无法检测到浏览器关闭并“销毁”会话。好的,那么我需要设置cookie。不过我可以对cookie使用相同的会话id,对吗?我的意思是,会话已经保存在数据库中,我只需要评估客户端cookie并从那里继续。我说得对吗?有几个星期的会话会让会话存储变得非常大,效率非常低。在设计“记住我”功能时,甚至不要考虑