今天我在采访中被问到
如果浏览器不支持Cookie,那么PHP如何维护会话?
可供选择的是...
1. using an MD5 hash of the user's email address as the session identifier
2. using the browser's network address as the session identifier
3. including the session identifier as a parameter every GET and POST request
4. using the "secure cookie" header to force the browser to set a cookie
- 谁能告诉我哪个是准确的,请简单解释一下?*
5条答案
按热度按时间yzuktlbb1#
正如我们在评论中讨论的那样--2个答案是有意义的,2个答案是不合理的。
1.完全依赖于会话,所以它不会工作。
1.可以工作,但同一网络中的人将共享相同的会话。
1.是会话的另一种工作方式,但如果您共享URL,则会发生与Second相同的错误。
1.一个明显的诱饵答案。
建议的答案是2和3的组合(如果您只能选择一个,则为3),存储由URL中带有Unix时间戳的IP地址标识的会话,以区分用户。
u5rb5r592#
访问您的网站的访问者会被分配一个唯一的ID,即所谓的会话ID。这要么存储在用户端的Cookie中,要么在URL中传播。
我认为这是第三种选择,但这是不安全的选择。
请参阅:http://php.net/manual/intro.session.php
omhiaaxx3#
以下是对可选选项的说明:
1.使用用户电子邮件地址的MD5散列作为会话标识符
这定义了如何识别会话,但没有定义如何将该身份提供给*正确的“网站访问者。
MD5不安全(a session link)。它不应用于解析标识数据。电子邮件地址是识别数据。这个答案是非常不安全和危险的。
**结果:**无法识别正确的浏览器。存在很高的安全风险。
1.使用浏览器的网络地址作为会话标识
浏览器网络地址(又名IP)会因不同的网络服务提供商而不同--您可能一分钟前是
123.234.345.456
,一分钟后是243.534.346.41
,而在同一个网站上。此外,使用2还会打开一些非常有趣的错误。特别是当有来自同一网络的多个客户端时。人们会突然开始分享会话。(谢谢)。
最后,IPv4地址的范围非常有限,所以很容易被人强行攻击(即尝试地址,直到一个地址起作用为止)。
**结果:**可以识别正确的浏览器。然而,没有担保人,而且会有误报和中断。存在很高的安全风险。
1.在每个GET和POST请求中包含会话标识符作为参数
这将按照编码者的设置向每个网页调用和提交附加一个会话标识符。这是这里最好的选择。这个答案意味着,任何共享URL的人也将共享他们的身份验证,这也可能是非常不安全的,除非网站编码者执行各种缓解检查。
**结果:**会识别出正确的浏览器。然而,没有监护人,而且由于客户端用户共享URL,因此将有误报。这是给出的选择中唯一最好的答案。存在适度的安全风险。
1.使用“安全cookie”头强制浏览器设置cookie。
这不会有任何作用。这将强制将会话Cookie加密发送;如果网站域未加密,则这可能不合适。这也不会解决这样的问题,即虽然cookie发送正常,但通信另一端的浏览器仍将拒绝接受它。
**结果:**这不会做任何事情。这并没有回答这个问题。
点击此处阅读更多内容:How can I send PHPSESSID in the URL?
和read the manual。
7xzttuei4#
正确答案是:
将会话标识符作为参数包括在每个GET和POST请求中
这张屏幕截图来自密歇根大学测验提供的面向所有人的网络应用专业化认证。
ajsxfq5m5#
第三,这是唯一真正的答案。但千万不要相信这样一个愚蠢的想法,即Cookie保存的唯一会话标识符比通过GET、POST和PUT请求传递唯一会话标识符要安全得多,因为两者都同样不安全。