网络会话或无会话

时间:2009-10-07 13:58:13

标签: php security

我正在考虑创建一个'会话'表,其中包含随机#,用户ID,用户登录时填充的日期/时间以及每个显示页面中使用的随机#以唯一标识该人。每次用户显示页面时,如果过去x小时内没有活动,那么记录将使用最新的日期/时间活动进行更新,而不是我计划强制重新登录。几个问题:

  • 我应该包含IP(我不关心多会话,但考虑到它以增加安全性)
  • 这样做效果更好,比标准的PHP会话方法(cookie等)更安全
  • 我应该使用这个方法以及php会话(cookie)来匹配这两个以确保其合适的人(包括IP等的cookie。)

是否有更好的方法或标准安全模式(我不知道)?

10 个答案:

答案 0 :(得分:3)

您的方法听起来与我的饼干惊人相似。您在某处设置了值,然后在每个页面加载时检查它。当饼干/会话完全足够时,我认为不需要重新发明轮子。

一般情况下,我更喜欢使用cookies,因为用户可以在会话之间保持登录状态(即当他们关闭浏览器并返回时)。

答案 1 :(得分:1)

为什么不使用默认的PHP会话并将其数据存储在数据库中呢? 有几个函数允许您重新定义PHP在访问或更新会话时所执行的操作。

This article解释了这一点。

答案 2 :(得分:1)

不要使用IP。虽然这对大多数人都有效,但有些人可能拥有动态IP。例如,访问者可能在他的ISP的负载平衡代理服务器群之后。

答案 3 :(得分:0)

第1点 - 取决于人们是否使用静态IP

第2点 - 负载平衡和冗余问题需要在数据库中存储会话。这还取决于你的申请有多繁忙。

第3点 - 一个或另一个应该足够。

答案 4 :(得分:0)

  1. IP可能会有所帮助,但如果某人拥有动态IP,则不建议将其用于参考点以外的任何内容。

  2. 我建议使用会话方法,因为除非服务器管理员更改,否则通常会超时20分钟。

答案 5 :(得分:0)

我建议只选择一种方法并确保其正常工作。有多个验证听起来不错,但它通常只会增加复杂性和错误,而无需添加任何额外的功能。

将值存储在会话中,因为它的开销较小,您可以根据需要将会话设置为过期。这解决了整个“他们最后一次登录的事情”而没有多余的计算。

会话的整个目的是在该计算机上存储与该人相关的值,这正是您所寻找的。复制似乎是多余的。

答案 6 :(得分:0)

  1. 使用Cookie填充会话。
  2. 使用会话进行正常使用。
  3. 确保每个会话通过db存储一个随机字符串。
  4. 将IP保存到数据库只是为了您自己的信息,因为您需要进行临时IP禁止,但不要使用它们就像它们是绝对可靠的。

答案 7 :(得分:0)

为什么需要使用数据库进行跟踪会话。你觉得它不是一个开销吗?我建议你继续PHP会议。

答案 8 :(得分:0)

我正在使用CodeIgniter - 他们有一个内置的会话处理程序,它似乎同时使用cookie和数据库(一个检查另一个) - 我正在寻找的一切....框架工作

答案 9 :(得分:0)

答案两个!

要点: 您应该从不盲目地接受cookie或会话来验证用户,这些用户很容易被XSS窃取,并且可以被非原始用户使用。

对于用户验证,因为无论如何你要去验证用户,所以没有真正的开销。 您只需在登录数据库时应用一个值,并在每次加载页面时通过某种方式验证它。

我选择的方法是用户会话状态的签到结帐方法。 其中在页面加载时创建唯一ID,会话变量存储此唯一ID。 此唯一ID也存储在数据库中的用户ID,以及IP地址和IP更改。 (我还存储了经过验证的其他信息)

这可以用于防止2个单独的浏览器同时为单个用户ID登录,这不能仅通过会话来完成,因为会话不关心谁创建它们或何时创建它们。 但是使用checkin-checkout,因为唯一ID总是不同,所以会发生不匹配。

脚本验证数据库中会话值和IP地址的唯一ID。匹配完成后,更改唯一ID并更新数据库。 如果在x秒内更改了IP,请为该用户执行某些操作(强制新登录),如果唯一ID不匹配则执行其他操作(例如注销,警告等),如果最后一次活动是x秒前做某事对于那个用户。

所以登录 - >创建会话/用户验证 - >下一页 - >使用数据库唯一ID验证会话+验证用户 - >生成新会话唯一ID - >更新用户上次/唯一ID

最后,它可以让您更好地了解用户访问其帐户的位置以及每个点的频率EG:工作x 3,家庭x 5,移动x 1.还可以让您保护自己的帐户盗窃的用户。 EG:德国用户突然从泰国或美国登录。通知他们更改并发送请求以验证对其电子邮件的更改。