在PHP中实现$ _SESSION背后的细节是什么?

时间:2013-10-17 15:32:17

标签: php session

因此,我在管理会话时从安全性中学到的是,最佳做法是将生成的会话ID保存到客户端cookie和其余数据以保存在服务器上。那么$ _SESSION究竟发生了什么?在官方的PHP文档中,我发现只有很少的描述,没有说什么。

我是否需要在服务器上的数据库中创建会话表,或者$ _SESSION是否创建了一些临时表并保存所有需要的数据?问题是我需要建立良好可靠的系统。 1000个用户同时登录到服务器,所以我不知道它是多么好的让#34;让" $ _SESSION完成所有工作。

$ _SESSION如何生成ID?它是IP和浏览器组合的一个ID吗?我的意思是,这样就不需要获得使用cookie的许可,而是它(服务器)为IP和浏览器保存了一些ID,这是客户端没有任何会话数据或任何数据。这只是我思考它可能会如何发展的方式,但我不知道该怎么做以及正确的方式,你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

$_SESSION为每个会话生成一个随机ID,该ID未链接到IP或其他客户端信息,例如user-agent。

  • PHP为用户生成一个cookie,它包含会话ID。

  • $_SESSION数组已序列化并保存到服务器上的文件中。

  • 当用户使用PHP会话cookie连接时,会检查ID,然后可以从文件中反序列化$ _SESSION数组。

从安全的角度来看,重要的是要注意PHP不会基于IP或用户代理验证用户,因此用户可以窃取其他用户cookie和会话数据。如果您需要此功能,那么您可以轻松实现某些功能,在会话数组中存储哈希值,并在会话恢复时进行检查。

也可以编写自己的会话实现,您需要做的就是创建一个具有唯一ID的cookie,然后如您所述 - 将数据存储在数据库中。我个人更喜欢创建自己的UserSession课程,它让我完全掌控。

答案 1 :(得分:0)

关于会话的事情是它存储在客户端的浏览器中,所以如果你打算制作2个网站并分配

 $_SESSION['logged']=1;//assign this in website 1 as value if logged
 $_SESSION['logged']=1;//assign this in website 2 as value if logged

你仍然可以在两个系统中登录你是否也知道你可以使用名为faceniff的android应用程序劫持一个facebook帐户如果它没有“https”它就像通过创建相同的会话名称伪装你是帐户持有者和价值

我做的是当用户登录时我将md5哈希作为会话值分配并将其插入数据库中用户的行,然后检查数据库值是否等于浏览器会话 所以数据库看起来像这样

id   username   password         session_code
1    imbatman   superman     12sd5%sda812312y34356 //note this md5 is only an example 
                                                  //but it looks like that but longer i think

并在注销时清除数据库会话并销毁会话

id   username   password         session_code
1    imbatman   superman     

但我仍然是php的新手,仍在寻找在我的网站中应用更多安全性的方法,但现在这就是我正在做的保护免受渗透