2011-09-30 79 views
6

我应该如何在会话上托管用户的ID?只是为了插入ID?我的意思是(例如):会话注入?

$_SESSION['id'] = 1; 

有没有办法改变它由用户自己(作为cookie ..)?因为如果是这样,他可以更改为任何ID。

还有一个关于它的问题 - 我如何检查用户是否登录(使用会话)?我创建了一个会话:

$_SESSION['is_logged_in'] = true; 

同样,不能在用户只需创建一个会话他的名字是“is_logged_in”和他的价值是真的吗?或者只是服务器有一个关于服务器的价值的控制权?

+4

请参阅:[PHP会话修复/劫持](http://stackoverflow.com/questions/5081025/php-session-fixation-hijacking#5081453) –

+1

它应该工作的方式是由SESSION控制和创建仅限服务器。所以不,用户不应该能够*创建一个他的名字是'is_logged_in'*的会话,并且它会以你描述的方式影响会话,除非你的SESSION方法有严重缺陷。 –

+1

'$ _SESSION'中的值专门存储在服务器端。用户只收到一个包含其会话ID的PHPSESSID cookie。 PHP使用它在会话存储中查找数据。 –

回答

12

PHP中的所有会话变量都存储在服务器端。 客户端存储引用应该使用哪个会话的cookie,然后服务器查找会话的值。 在会话中存储is_logged_in以及用户标识是安全的。

你应该知道的是,如果另一个用户获得另一个用户的会话cookie的持有者,他们将能够模仿该用户,直到会话超时。一个简单的解决方案是将会话链接到IP。

+0

Check @Charles [answer](https://security.stackexchange.com/questions/14093/why-is-passing-the-session-id-as-url-parameter-insecure#14094)。 “将会话锁定到IP地址可能会意外疏远人们。” – another