cookie与session二三事
sshong 发表于2013年8月11日 09:00:55 更新于2013年8月11日 09:39:03
关于cookie与session,这里简单的记一些,
由于http是无状态的,也就是服务器不认识客户端,要让他们认识,于是产生了session(用一个id标明用户身份)。
同样,由于http是无状态的,有时服务器想在客户端存储点信息,于是产生了cookie。
cookie可以通过客户端js读取写入,也可以通过服务器端在http响应头中设置,同时下次访问该服务器时会自动读取这些cookie并放到http请求头中。

1、session是用sessionid来标示用户的,而这个sessionid必须在每次客户端请求服务器时告知,联想到cookie,自然最好的方式就是用cookie来保存sessionid咯。当然有各种替代方式传递sessionid如url重写加参数。

2、php.ini中的所有session相关的配置以及带cookie相关的配置都是关于session以及sessionid这个cookie变量的设置,而不是全局cookie的设置!setcookie与session半毛钱关系没有,只是session_start时会自动产生一个sessionid的cookie(如果请求头中没有sessionid)!setcookie的所有参数都必须在调用时指定,setcookie的函数原型:
setcookie ( string $name, string $value, int $expire = 0, string $path, string $domain, bool $secure = false, bool $httponly = false)
expires为0,则代表浏览器关闭时这个cookie就失效。

3、由于cookie可以用客户端js读取,拿到内容后就可以模拟http请求头达到欺骗服务器的目的,也成了安全的一大隐患。幸好,cookie变量有个httponly属性,主流的浏览器都支持,包括ie。
所谓httponly的cookie变量,就是不允许本地js读取的cookie变量,(注:这里的cookie指的是一个cookie变量,不是cookie文件),但是这些值还是通过工具可以看到。
这样做有一个好处,就是可以预防简单的xss攻击,因为通过注入js将document.cookie传出去的时候httponly的cookie变量是拿不到的。
php.ini设置中有个session.cookie_httponly,将这个值设置为1,会将sessionid这个cookie变量设置为httponly,但是对于setcookie函数生成的cookie则不起作用!
setcookie函数调用必须将最后一个参数设置为true。
将session.cookie_httponly设置为1,并参考下面代码:
<?php
session_start();
setcookie('test6', 'kkk2');
setcookie('test7', 'kkk3', NULL, NULL, NULL, NULL, TRUE);
?>
<html>
    <head>
        <script type="text/javascript">
        var cookie = document.cookie;
        console.log(cookie);
        </script>
    </head>
</html>
运行结果:
session
关于php session相关的文章,推荐几篇
php深入浅出session
PHP5 session 详解【经典】
标签:无分类:PHP阅读:2800
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅