因此,我在管理会话时从安全性中学到的是,最佳做法是将生成的会话ID保存到客户端cookie和其余数据以保存在服务器上。那么$ _SESSION究竟发生了什么?在官方的PHP文档中,我发现只有很少的描述,没有说什么。
我是否需要在服务器上的数据库中创建会话表,或者$ _SESSION是否创建了一些临时表并保存所有需要的数据?问题是我需要建立良好可靠的系统。 1000个用户同时登录到服务器,所以我不知道它是多么好的让#34;让" $ _SESSION完成所有工作。
$ _SESSION如何生成ID?它是IP和浏览器组合的一个ID吗?我的意思是,这样就不需要获得使用cookie的许可,而是它(服务器)为IP和浏览器保存了一些ID,这是客户端没有任何会话数据或任何数据。这只是我思考它可能会如何发展的方式,但我不知道该怎么做以及正确的方式,你能帮助我吗?
答案 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的新手,仍在寻找在我的网站中应用更多安全性的方法,但现在这就是我正在做的保护免受渗透