当前位置:  开发笔记 > 编程语言 > 正文

我对PHP会话的理解是否正确?

如何解决《我对PHP会话的理解是否正确?》经验,为你挑选了2个好方法。

我一直对会话如何在内部工作感兴趣,但我对C知之甚少(并且不确定在PHP源代码中查找的位置).

这就是我对会议的理解:

    当您启动会话时,将为用户分配一个存储在cookie中的会话ID.

    当会话数据被保存(通过$_SESSION)时,它存储在文件系统上,具有相关的会话ID和到期时间.

它是否正确?还有什么方法可以创建会话ID?我假设它是基于时间的,但如果两个用户同时发送请求怎么办?内部有哪些方法可以防止它们获得相同的ID?

谢谢,



1> Gumbo..:

我的理解是内部会话处理过程如下:

session_start被调用时,PHP正在寻找来自客户端的参数通过了POST,GET发送,或在Cookie(取决于配置;请参阅session.use_cookies,session.use_only_cookiessession.use_trans_sid指定)用的名称session.name的值,用于使用已启动会话的会话ID.

如果找到有效的会话ID,它会尝试从存储中检索会话数据(请参阅session.save_handler)以将数据加载到$_SESSION.如果它无法找到ID或禁止使用它,PHP会使用哈希函数(请参阅session.hash_function)生成一个新ID ,该源代码生成随机数据(请参阅session.entropy_file).

在运行时结束时或session_write_close调用时,会话数据将$_SESSION被存储到指定的存储中.



2> Paul Dixon..:

查看php源代码中ext/session/session.c中的php_session_create_id

它是这样的:

得到时间

获取远程IP地址

使用当前时间的秒和微秒以及IP地址构建一个字符串

将其提供给配置的会话哈希函数(MD5或SHA1)

如果已配置,则从熵文件中提供一些额外的随机性

生成最终哈希值

因此获得重复是非常困难的.但是,您应该熟悉会话固定的概念,这允许攻击者可能选择他们的目标将采用的session_id - 请参阅会话和Cookie以获得良好的入门.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有