session 和 coonkie 的区别于联系

来源:互联网 发布:capvision凯盛 知乎 编辑:程序博客网 时间:2024/04/30 02:07

对于PHP的初学者而言,经常因为session和cookie而头大,因此。


<?php /**cookiesession总结session的工作原理:接受cookie携带的session ID ,验证合法性如果本地浏览器禁用了cookie,session也是可以用的,但是不能使用本地浏览器传值,可以通过URL地址重写 sessionIDURL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态其实说白了session就是用来保存会话的cookie。详细信息可以参看https://www.zhihu.com/question/19786827**/1.用户进行 登录 退出 的时候需要用到2.cookie就是吃饭用的牌子  浏览器给服务器传数据时, 服务器 给浏览器一个 cookie,数据就保存在cookie里,浏览器再次访问的时候,传给服务器cookie  session就是超市用的柜子  浏览器给服务器传数据时, 服务器 给浏览器一个 很难识别cookies ,并且把数据保存在服务器中, 浏览器再次访问的时候,把复杂的cookie传给服务器,服务器调取数据3.cookie 的设置,改变,销毁 都是通过 setcookie() 这个函数来实现的  cookie 的读取,是通过 $_COOKIE 来读取的4.setcookie()的参数 setcookie(name, value, time(), path);/*setcookie()可以由2个参数,3个参数,4个参数,5各参数setcookie($name, $value, $expire=0, $path, $domain, $secure = false, $httponly=false)*///2个参数设置的cookie,浏览器关闭,cookies就会失效setcookie('age', 29);//3个参数设置cookies,第3个参数就是cookie的保存时间,以时间戳为单位,可长可短,且不受浏览器开关限制setcookie('school', 'MBA', time()+3600); //15秒后消失,关闭浏览器,MBA还在,但是age不存在了echo "cookies设置成功";//4个参数设置cookie,cookie的读取范围,默认在子目录下都能读到,//如果想要让cookie整栈有效,1.可以在根目录下设置setcookie//2.也可以使用第四个参数来指定 cookie 生效路径setcookie('golbal', 'any where!', time()+3600, '/'); // '/'表示的是根目录的意思//5个参数, cookie是不能跨域名的(不同网站之间不能通用。。保证安全性)//比如sohu.com的cookie,不能发到sina.com使用,//但是可以在一个域的子域名下保存,需要用到第5个参数//比如: setcookie('name', 'value', time()+200, '/', 'sina.com.cn')//这个 cookie 可以在jushi.sina.com.cn 下使用// 也可以在 book.sina.com.cn 下使用 ...等等//一般只用前四个,第五个用于大网站,但是大网站一般有专门的ssn一站式处理方案/**名称: name内容: 29主机: localhost路径: /shangcheng/day16/发送条件: 任意类型的连接过期时间: 在会话结束时1.名字,2.值, 3.事件,4.路径**///cookie的失效可以改变时间,使用负数或者0.setcookie('school', 'MBA', 0);5.cookie 是服务器给浏览器牌子,下次访问时,浏览器拿着牌子访问设置cookie, 使用setcooki()使用cookie, 使用$_COOKIE[] 超级全局变量那么问题来了,如果 cookie 被篡改了,后果很严重所以,cookie往往记住用户名,浏览历史等等安全性不高的地方如果要防范的话,可以用session技术,也可以用一些加密机巧6.session/**1.浏览器 发送数据给 服务端,服务端 储存数据 并且产生一个 凭证 返回给 浏览器2.浏览器 再次访问时,给服务器凭证服务器 利用凭证取出数据,传给浏览器**/7.cookies 篡改是在浏览器上修改,危险session 篡改是在服务器中修改,属于把系统(服务器)入侵了,凭证比较乱是为了各个客户之间可以猜出来,防止偷取客户端凭证(PHPSESSID) //也就是(sessionid) 当我们的sessid被偷取的时候,赶紧退出后重新登录8.session的详细用法/**session  的创建、修改、销毁1.都必须有  session_start();2.session_start() 之后,$_SESSION 就可以添加、删除、修改了,可以当做普通数组修改cookie的操作只能通过 setcookie() 来操作**//*销毁 $_SESSION1.把箱子清空2.把箱子毁掉*/1.单独销毁某一个单元  unset($_SESSION['user'])2.把箱子清空(文件变空白了)$_SESSION = array();3.利用函数把箱子清空,效果同 2session_unset();4.把箱子毁掉session_destroy();// $_SESSION 的生命周期session 两个方面发挥作用:1. 客户端的 cookie 2. 服务器端的 session让session 失效的话,两个方面分析1.在 php.ini 中,可以控制cookies的生命周期,以秒为单位session.cookies_lifetime = 15如果用户篡改声明周期,为1年,我们是无法判断的如果严格控制session有效期半个小时,可以这么做利用时间戳 $_SESSION['time'] = 登录的时间戳,然后检验session的开始时间为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。/**session的有效路径,取决于cookie,只要cookie有效,那么session就能读到在php.ini下,指定了凡是关于sessionid的cookie的有效路径是根路径/*; The path for which the cookie is valid.; http://php.net/session.cookie-pathsession.cookie_path = /*//**cookie 中只能存放 string  数字 之类类型的标量session 可以存放数组,对象之类的,除了不能存储 资源类型 之外的其他7种都可以如果我们把对象写入session中,那么读取对象的页面中也应该有这个对象的类的声明才可以,否则,从session中分析出一个对象,但是却没有和他相对应的类,就会提示:__PHP__Incomplete_Class Object 提示class Dog{public $leg = 4;}  //读取的时候,只需要把类拿过去就OK了$dog = new Dog();$_SESSION['dog'] = $dog; **/cookiesession储存地点客户端服务器安全性  低高储存类型 不能存数组、资源、对象 除了资源创建方式 setcookie() session_start()开启,然后当做数组用读取 $_COOKIE $_SESSION销毁    setcookie('k','y',time()-1)$_SESSION 赋值或者函数(4种方式)在使用cookie之前,不能有任何信息出现,空白也不可以,报错之后如果还没有,检查bom信息


0 0
原创粉丝点击