zoukankan      html  css  js  c++  java
  • 会话控制:cookie和session基础学习笔记

    在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session)

    我们可以简单理解为浏览器的开关.

    其实对cookie和session也是主要为curd操作

    1. cookie

    cookie 之前以字符串的形式保存在客户端 *.txt的格式。google等浏览器现在已经改为二进制存储,相对安全些,HTTP协议是无状态协议,cookie是服务器留在用户计算中的小文件,用来识别用户。

    • 创建cookie

    setcookie() 函数用于设置cookie。

    setcookie(name,value,expire,path,domain,secure);

    参数 描述
    name 必需。规定 cookie 的名称。
    value 必需。规定 cookie 的值。
    expire 可选。规定 cookie 的有效期。
    path 可选。规定 cookie 的服务器路径。
    domain 可选。规定 cookie 的域名。
    secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
    我们常用的是前三个参数 而且至少有这三个参数,如果没有第三个参数,则不能保存cookie

    直观的 我们通过在服务器端设置cookie,通过http协议获取,则在响应头 我们能看到有这样一个参数

    set-cookies:*****

    cookie保存的数值类型:cookie只能保存字符串,而session保存的数据类型较多 比如对象和数组。

    cookie 的数据以键值对的方式 存储在文件中 ,保存中文数据的话 是乱码 可以通过urlcode来转化。

    cookie 可以有多个键值对,还可以给他们指定不同的有效期。浏览器可以正确的区分他们的有效期。

    • 取cookie

    用全局数组 $_COOKIE 。

    客户端存在cookie 且cookie在有效期内 则可以获取。

    机制:浏览器可携带,通过抓取,我们能看到 服务器在客户端设置cookie,下次浏览器携带cookie信息访问服务器。然后服务器可以通过$_COOKIE 来获取。

    • 更新cookie

    用setcookie()函数重新设置即可。

    • 删除cookie

    指定删除某一个cookie,只需要用setcookie(),设置时间为当前时间减去一个时间即可。

    删除所有cookie,遍历$_COOKIE,遍历设置时间为过期时间。同时若cookie删除完,则相应的文本文件也会被删除掉。

      2.session

    在实际的网站开发中,session有很多应用场景,比如购物车,用户登录状态保持 等等,session相对cookie来说  安全/减少带宽消耗。

    我们需要若想好好利用session,则需要好好了解session保持的数据结构。

    特别需要注意的是,不管对session做什么操作,每次都要session_start(); 初始化

    • 写入session

    session_start();

    $_SESSION[$key] = $value;

    • 获取session

    session_start();
    $_SESSION 全部

    $_SESSION[$key] 获取某一个

    • 更新session

    类似写入 重新定义一个

    session_start();

    $_SESSION[$key] = $value;

    • 删除session

    session_start();
    删除某一个session
    unset($_SESSION[$key]);
    删除所有session
    session_destroy();//注意:删除一个会话对应的session  不是所有用户  是某一个用户
    同时会把当前的session文件删除掉。

    正常情况下,通过session和cookie的原理 可以看出session是需要结合cookie来用的,但是存在cookie被禁用的情况。

    其实cookie保存的session信息就是session_id();

    这样 如果用户禁用cookie,那我们可以自己去想办法存储session_id()就好了。

    判断是否禁用cookie 然后我们自己去给自己存储session_id();

    禁用cookie 用session

    方案一
    1.自己获取session_id()
    方案二
    2.用常量
    SID

    方案三

    3.启用 session user_trans_sid 指定是否启用透明SID支持 默认不支持0

    效果 是在每个 超链接后面带SID

    本人记录权作笔记参考,快速回忆,实际应用中有一些复杂的场景,比如 session的跨服务器共享。涉及到知识较多,但是还是要在充分理解session 原理的基础上 去解决相关的问题。

    关于session的详细原理,及session共享的方案 找了几篇参考下,和目前我所遇到的业务场景不同 ,但是还是有很大的参考价值。

    后续我会在工作中慢慢补充完善。

    session原理总结:http://www.cnblogs.com/wangtao_20/archive/2011/02/16/1955659.html

    跨服务器session共享的四种方法:http://blog.sina.com.cn/s/blog_5f3d71430100jv7q.html

    session多服务器共享的方案梳理http://www.cnblogs.com/wangtao_20/p/3395518.html

    PHP 实现多服务器共享 SESSION 数据http://www.cnblogs.com/CHEUNGKAMING/p/4092867.html

  • 相关阅读:
    sql注入漏洞详解
    HTTP1.0/1.1/2.0的区别
    http协议详解
    LRU经典算法的原理与实现
    [译转]深入理解LayoutInflater.inflate()
    Touch事件分发机制
    重要:Android绘图只Mask遮罩
    Android View学习Tips
    ViewPager学习及使用(一)
    Android 实现瀑布流的两种思路
  • 原文地址:https://www.cnblogs.com/zswordsman/p/5801372.html
Copyright © 2011-2022 走看看