cookie和session原理

  session
  session_start() 开启session机制,告诉php我想使用session了

    列:
    $_SESSION['age']='18';
    $_SESSION['name']='zhengsan';
    删除一个session值
    unset($_SESSION['name'])
    清空session
    session_destroy()
    修改session
    $_SESSION['name']="lisi";

因为session比cookie安全,所以登录和注册用session而不用cookie
session是基于cookie的

设置session后再本次会话中session将会共享
本次会话中浏览器第一次往服务器上发送http请求
服务器解析请求地址,等解析到session_start()时
会在服务器的//目录下简历一个sess_adcdefg的一个文件,
继续解析,可以将session值存储到该文件里,
等该文件解析完毕后回复给浏览器,
告诉浏览器将sessionID=abcdefg(session文件名称,以cookie的方式存储在浏览器内存里,
下次再请求改服务器时,
会将sessionID=abcdefg带到服务器上碰到session_start(),
首先会往/tmp目录下寻找与sessionID同名的文件,
如果找到就直接用该文件里的数据,如果没有找到则新建一个文件.

经验所得:
一般存session时存储的是登录用户基本信息,
一般是个数组,最起码得有用户的ID;
注册时只设置session;
登录时不管有没有设置7天免登录都要设置session,设置7天免登录就将用户信息存储7天;
检测是否分发登录时我们只需要检测session就行,因为session安全;
检测session之前我们需要检测上次是否设置了7天免登录,
(当cookie存在且session不存在时,将cookie里的值赋给session)


cookie
cookie里面只能存基本类型(整型,布尔型,字符串,浮点型....),不能存数组;
会话cookie:cookie值在关闭浏览后会消失;
cookie 可以伪造,不安全

    设置cookie
    setcookie( "cookie的名称","cookie的值")
    取cookie的值
    $_COOKIE["coolie的名称"]
    持久cookie
    cookie值在关闭浏览后不会消失;等时间超过我们设置cookie的时间时才会消失
    setcookie("cookie的名称","cookie的值",time()+过期时间)
    删除cookie的值
    setcookie("cookie的名称","cookie的值",time()-1)
    会话cookie原理
    浏览器往服务器发起http请求;服务器会处理http请求,调用php模块,
    解析请求的页面,当解析到setcookie("name","zhengsan")这行代码后,
2等到该页面完全解析完毕,服务器会回复给浏览器,同事告诉浏览器让浏览器存储一下(name=zhengsan)这条数据,存储到浏览器所占用的内存里;
3下一次再次发送http请求时,就会内存里的(name=zhengsan)带给服务器,服务器就能获取cookie;
4如果关闭浏览器,内存里的数据就会消失,就不会带数据给服务器了;
</dl>


七天免登陆:

<h4>|:cookie的七天免登陆原理:</h4>
   cookie的七天免登陆就是将cookie的值存在了客户端硬盘的文件里了,当关闭浏览器后内存中的 cookie值消失了
   当再次开启浏览器后如果访问这个网站的话,浏览器会自动将客户端硬盘的cookie值读取到内存中通过浏览器发送http协议
   发送到服务器里,这时候就可以直接访问了.

 <h4> ||:session的七天免登陆原理:</h4>
   其实就是重新走了一次登录处理页面,只不过不用再进行数据库验证了,
   直接从cookie文件中取出来了数据库里的用户名和用户ID
   而防非法登录检测的就是session里面的数值用户名和用户ID
   
   其实session和cookie的七天免登陆都是省去了登录处理页面,直接到了登录后的首页
   只不过是cookie直接获取了,而session则是又重新设置了一次将存储在cookie里的用户信息
   重新设置在了session文件里,从而就实现了免登陆,他们都是免去了数据库查询验证这一步

  session和cookie对比:

 session和cookie都是通过服务器存储在浏览器的,首先服务器先设置session或cookie
   设置后再回复给浏览器让浏览器存储在内存中的cookie里,然后在发送http请求时通过
   http协议将浏览器cookie中的值带入到服务器中,当服务器检测到值时,程序就会继续
   运行下去,否则的话就是非法登录.

 :session和cookie原理的详细分析:

   <h4>session:</h4>
   浏览器通过登录页面发送http请求发送到服务器,这时候服务器处理登录请求,
   当服务器解析到session_start时就会在服务器的temp文件夹里新建一个空的加密过的文件
   这时候就已经成功将session存储在了服务器里,只不过还没有回复给浏览器,
   因为服务器还没有将这个登录处理页面解析完毕,这时候程序继续向下执行,会进行数据库
   查询,查询之后将用户名和用户ID值写入session(‘user’,$user)里面,这时候就会将这个
   值写入到之前session_start()新建的空文件里,这时候之前建的这个文件就在是空的了
   如果这时候不跳转页面程序退出了话,就相当于服务器将这个页面解析完毕了,这时候就会通过http协议
   将session值回复给浏览器通知浏览器将session存在浏览器的cookie里,但是这时候在服务器的
   登录处理页面还打印不出来session里面的值,因为服务器要想得到session里面的值,
   必须通过浏览器发送http协议将存储在浏览器中的cookie值发送到服务器后,服务器才能读取到,
   服务器读取到来自浏览器的cookie值,这时候就会和服务器之前建的文件名作对比,如果匹配的话
   服务器就会将session里面的值打印出来显示在浏览器的页面上,这时已经成功设置了session
   只要浏览器不关闭内存中的cookie值就不会消失,每次发送http请求时就会将内存中的cookie值带入到服务器
   无论请求那个页面内存中的cookie值就会带到服务器,这时候服务器就会对比之前存的session,
   如果和服务器的文件名匹配就可以操作,存储在服务器文件里的session数组值了,
   存储在服务器的session值默认存储24分钟,如果超过24分钟就会自动删除了,这时候在不关闭浏览器的情况下
   服务器的session消失了,这时候浏览器再发送http请求的话,将内存中的cookie发送到服务器,但是这时候
   服务器是没法和浏览器发送过来的session名作对比的,对比不成功的话服务器就不能操作session值了
   只有对比成功的话服务器才会将存储在temp文件夹下的session文件里面的值读取出来,读取出来后页面在
   检测session是否为空时,就会通过检测了,而且读取出来的是用户名和用户的ID值,因为页面检测的是
   session里面的是值是否为空,这时候如果在服务器里将session文件里面的文件清空,这时候也相当于session为空了
   同样也属于非法登录了

   <h4>cookie:</h4>
   浏览器发送http请求给服务器服务器处理登录请求,这时候服务器在解析到setcookie()时
   服务器会将setcookie()里面的值存储在服务器里面,当页面解析完毕后服务器会将setcookie()里面的值
   回复给浏览器,浏览器就会自觉的将这个值存在浏览器的cookie里,当浏览器再次发送http请求时,只要浏览器内存中的
   cookie值不消失就会随着http请求发送给服务器,服务器接收到浏览器发来的cookie值后会和之前存储的cookie值作对比
   如果对比成功就会可以跳转页面了,之所以说cookie不安全时是因为,cookie的值是明文显示而且是由PHP进行设置,对比的时候
   也是PHP语言加密方式和浏览器之间作对比,即使通过base64_encode()函数加密通过base64_decode()函数解密,
   但是这样即使是加密过的也可以通过解密函数将其解密,当然如果是层层加密的话就不好解密了,但是这样还没有session安全
   因为session是服务器没有通过任何加密方式分配的session文件,而且24分钟自动删除,不会被伪造也不会重复,而且浏览器里
   存储的cookie只是一个引路者的角色,当浏览器将内存中的cookie带到服务器后,
   服务器对比后才会把存储在服务器文件夹里的session文件里的值调取出来,cookie存储服务器的值时固定不变的,
   而且不会删除,但是session存服务器的值时随机分配的session文件,所以说cookie可以伪造了


posted @ 2017-10-20 23:08  wy好久不见  阅读(172)  评论(0编辑  收藏  举报