热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

COOKIE/SESSION详解

cookie和session是web应用中的会话技术,何为会话技术呢?说白了就是服务器识别用户跟踪用户的一个功能一个模块,开发中非常重要哦。我们都知道w

  COOKIE 和 session 是web应用中的会话技术,何为会话技术呢? 说白了就是服务器识别用户跟踪用户的一个功能一个模块,开发中非常重要哦。

  我们都知道web是基于HTTP协议实现请求与响应的,关于HTTP网上一搜一箩筐,无非就是客户端和服务器之间协定的一种交互格式。但其有一个不理想的特点就是无状态性,也就是每次请求都是独立的,服务器不知道你是谁想做什么或者说不让你做什么(哪怕你用同一个浏览器)。这时会话控制就派上了用场,这样在访问服务器时由服务器设置一些信息在终端,之后每次请求都会携带这些信息,进而实现跟踪用户在整个网站的活动,也就实现了数据在多次请求周期的共享。

  COOKIE介绍

  COOKIE英文意思是小甜点 我的理解是服务器送给终端的礼物,由终端保存。在终端访问服务器时 由服务器向终端分配一些临时数据,在这些数据有效期内访问服务器 都将携带这些数据,由服务器获取识别 进而做出相应的回应。

  COOKIE的数据特点

  单个COOKIE保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个COOKIE。

  数据类型单一 只能是字符串(不过可以考虑序列化数据),数据存储在客户端每次访问要携带所以 会占用一定的带宽,也不是很安全(不要存储重要的数据)。

  COOKIE的使用

  setCOOKIE(name, value, expire, path, domain, secure, httponly);

    name: 保存的变量名

    value: 保存的数据

    expire:过期时间 以秒为单位,默认0 浏览器关闭即失效

    path:数据有效路径 默认当前路径,向下兼容。、

    domain:有效域名 在什么域名下有效。如果使用二级域名的话使用 .domain.com

    secure:是否安全传输 默认否 (https:)为安全传输

    httponly:是否只用于http传输使用,默认否(终端脚本可以获取数据)。

    一般情况下只是如下用法

    setCOOKIE('name', 'tom'); //设置

    $_COOKIE['name];     //获取 使用超全局变量

    setCOOKIE('name', '', time()-1); 或 setCOOKIE('name',''); //删除

    COOKIE的使用场景

    比如说 一周内免登录,未登录下的我的足迹,浏览历史等。

 

  session介绍

  我们在介绍COOKIE中说过COOKIE的特点 存储在终端 容量小 占带宽 不安全等特点,当然也有其优点 如存储一些不重要的数据做一些配合动作也是很实用的,再加上加密和序列化行为那也是十分强大的。有了对比再说session 理解起来就好多了,

  session的数据是存储在服务器端的,是不是有个疑惑 数据存在服务器那怎么跟踪用户 这不白闹吗?其实使用session还是离不开COOKIE的(有一种基于url的实现方式后面讲到),

  session的工作原理是这样的 在服务器开启session后 终端请求服务器之初就会自动生成一个session_id 的数据保存在终端用于唯一的指向服务器session、数据区的某个会话数据,看清楚哦是唯一的指向。这样就好比 你去一家超市 店员给你办了张会员卡,卡上有唯一的编码 而你的姓名 年龄 喜好 会员级别等数据都存储在超市的电脑里,这样实现用户识别了。由于session是服务器技术 于是乎就有了很大的战略纵深(个性化设置),

 

  session的使用

  session可操作的数据类型很丰富,4种标量2种复合类型都可以。

  session_start();  //开启session 不能重复开启可以用@错误过滤

  $_SESSION['name'] = 'tom'; //设置session

  $_SESSION['name'];   //获取

  unset($_SESSION['name']); //删除单个数据

  $_SESSION = NULL; 或 session_unset();  //删除全部session数据

  session_distroy();  //清空物理数据文件 

  setCOOKIE(session_name(), '', time()-1); //删除COOKIE中存储的session_id  

  温习两个函数  1.session_name()-设置获取session_id 的键 (SESSID)  

          2.session_id()-设置获取session_id 的值

    

  基于url的session的实现

  我们知道COOKIE是客户端功能 当然客户可以自由的开启和关闭,那么引出一个问题,客户端关闭COOKIE、后session是不是就失效了,答案是肯定的。那该如何实现用户跟踪呢,我们可以为session正常的使用设立第二道防线,那就是利用url、在各个脚本间传递session_id的值。具体实现如下。

  1.使用两个函数 session_name()获取当前会话的名称、session_id()获取和设置当前会话的ID 拼接为请求字符串连接在各个url连接后面。

    如:http://www.baidu.com/index.php?sname=sid

  2.在其他页面接收这个sid 注册为当前session_id  

    如:if ( isset( $_GET[session_name()] ) ){

        session_id( $_GET[session_name());    //注册为当前的session_id

      }

      session_start(); //不要忘记注册session_id后开启session 开启已有会话 否侧创建新会话

    

 

  按照这样操作是不是感觉太繁琐 哪个页面页至少也有几十上百个链接吧,难免会有疏忽。值得高兴的是php已经为我们提供了更为简单的方式,不过原理还是那个原理。具体实现如下、

    1.设置配置项

    开启session_use_trans_sid = 1 //开启自动追加session_id

    关闭session.use_only_COOKIEs = 0  //关闭仅使用COOKIE项

    后系统会在COOKIE关闭之后自动的为每个链接加上session_id 数据(链接上会有显示)。

    2.依然需要在其它页面进行判断接收这个session_id 进行注册。(语法如上不变).

     

  session属性

  session是基于COOKIE实现的,session-id 存储在COOKIE中,所以 这个session-id的属性决定了session的属性。

  配置项中有对应设置  

    session.COOKIE_life = 0;     //有效期(默认浏览器关闭)

    session.COOKIE_path = '/';  //默认跟路径

    session.COOKIE_domain = ; //有效域名

    session.COOKIE_secure = ; //是否安全传输 HTTPS

    session.COOKIE_httponly = ; //是否只http传输

  推荐使用  session_set_COOKIE_params(expire, path, domain, secure, httponly); 来设置这些属性

  以上是对于终端session_id属性的设置 接下来看看服务器端配置

  session_save_path   //session数据存储路径

  session_name = PHPSESSID; //保存在COOKIE中sessionid的键

  session_start = 0; //是否自动开启session

  session_use_trans_sid ;//是否开启自动传递SID 功能

  session_use_only_COOKIE = 1; //是否只依赖COOKIE传递SID

     

  session.gc_maxlifetime = 1440;  //session数据及文件生存周期 24分钟后视为垃圾

  session.gc_probability = 1;  

  session.gc_dirisor = 100;     

  //以上两个配置组合成了session的垃圾回收机制回收的概率,默认100次请求触发1次垃圾回收。session垃圾回收机制是惰性删除 过期之后不会马上删除而是等待回收概率的触发。

  session_save_handler = files; // session默认的保存介质 文件

       

  会话的基本使用已经介绍完毕如果有错误还请提出 在此表示感谢!!!

 

转:https://www.cnblogs.com/daimajie/p/6653732.html



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 一.常见基于身份识别进行反爬1通过headers字段来反爬headers中有很多字段,这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫1.1通过headers中的User-A ... [详细]
  • Java大文件HTTP断点续传到服务器该怎么做?
    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆 ... [详细]
author-avatar
suyewen525_337
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有