2013-06-29 159 views
3

我正在使用PHP $ _SESSION变量与我的网站的登录工作流程,我只是想作些澄清。就像Facebook一样,我想存储一个只有服务器已知的密码,用于签署发送到服务器和从服务器发送的每个请求。我最初的方法是生成一个随机字符串并将其存储在MySQL表中,但后来我了解了会话变量。我知道会话变量默认使用cookie来存储会话名称和ID,是否正确?没有实际的数据存储在用户的计算机上?所以,如果我想要实现:

 

# assume that $rand_string is not null and a string 
session_start(); 
$_SESSION['secret'] = $rand_string; 
 

不会有任何的方式为用户解码会话cookie并确定$rand_string的实际价值,对不对?只是想确保数据是安全的,否则我会回到不那么流畅的MySQL技术。我只是想到易于访问和管理的会话变量。

回答

7

会话数据存储在服务器端。

Cookie数据存储在客户端。

+0

那么会话cookie究竟存储了什么? –

+7

会话cookie将会话ID存储在客户端,因此在随后的请求中,浏览器可以告诉服务器使用哪个会话。 – DevZer0

+0

真棒谢谢! –

1

是的,你是对的,用户只知道会话ID或类似的东西,只是用来标识用户对应的会话。

其余数据暂时存储在服务器上。

访问者没有办法让会话数据得到处理,除非您的网站上有重大错误,我认为您没有这样做。

+0

太棒了!感谢您的澄清! –

2

我宁愿通过生成guid`功能做随机的东西,因为它会生成一个唯一的标识符,并且会比简单随机更安全:

# assume that $rand_string is not null and a string 
session_start(); 
$_SESSION['secret'] = com_create_guid(); 

是的,$ _SESSION变量存储在服务器端。

+0

每次该脚本执行时,uid都会改变吗? –

+0

是的,每次你打电话给它。会生成一个新的uid,但您可以在第一次将其创建时(每个用户)存储在$ _SESSION var中。 – Skatox

+0

抱歉继续提问!那么,即使对同一台计算机多次创建一个新的guid? –

1

你说的是对的。 $_SESSION中的所有数据只能在服务器上访问,但只有会话没有超时。

尽管如此,您应该小心存储在cookie中的会话ID很容易被捕获。详情请参阅Sessions and Security