2012-09-03 41 views
1

我是新来的饼干。试图了解我的网站在用户登录时设置的Cookie的结构。我使用Yii构建PHP,我也在config中启用了cookie验证。只是想确定它是否正常工作(使用HMAC令牌)以及我是否面临任何漏洞。饼干解剖

dd3b7ffe10018a899b39986a9d94dfd3b64e7e4as:248: “05035a5ae619356a622ed6ed805b6695a4fd6c44a:4:{I 0,S:18:” [email protected] “; I:1; S:18:” [email protected]“; I: 2; I:604800; I:3;一个:4:{S:6: “参数userid”; S:2: “10”; S:8: “用户名”,S:18: “[email protected]” ; S:4: “类型”; S:10: “诊断”; S:6: “状态”; S:7: “待定”;}}“;

cookie名称本身是随机的32个字符的字母数字序列。我也有一个phpsession cookie单独存储会话ID。这里[email protected]是用户名,类型和状态是应用程序相关的变量。 我以为cookies使用=来分配值,但在这里我看到:被使用。它是否正确 ?

回答

3

这不是一个cookie的内容。它是PHP $_SESSION的内容的序列化表示,它是通过在该数组上调用serialize生成的。

cookie本身只包含会话标识,它让PHP知道哪些序列化会话数据为unserialize,并将其作为$_SESSION提供给您的脚本。

+0

所以'我'必须是数组索引呢? 'a:4:'是指什么?它已经使用了两次,然后开始一个大括号? –

+0

'a:4'意味着有4个元素的数组如下。 'i:0:s:18:“...”表示数组的第一个元素有一个整数键“0”,其值是一个长度为18的字符串,其内容如下所示就是'serialize'是如何工作的。使用'var_dump'和'serialize'来查看值映射到序列化表示的方式。 – Jon

+0

这解释了很多!但我仍然不明白第一行,我的PHP会话Id是无法接近第一行给出的字符串。中间一行中的这个特殊部分:'i:2; i:604800; i:3; a:4:' –

0

第一行是Yii设置的HMAC令牌。通过框架文件挖掘,发现他们设置令牌,并序列化cookie数据。