【PHP学习笔记(十)】Cookie和会话管理

Cookie的基本操作

什么是Cookie

  • Cookie常用于识别用户,是服务器留在用户计算机中的小文件
  • Cookie的工作原理
    • 当一个客户端浏览器连接到一个URL时,它会首先扫描本地储存的Cookie,如果发现其中有与此URL相关联的Cookie,将会把它返回给服务器端
  • Cookie通常应用于以下几个方面
    • 在页面之间传递变量。因为浏览器不会保持当前页面上的任何变量信息,如果页面被关闭,则页面上的所有变量信息也会消失。而通过Cookie,可以把变量值在Cookie中保存下来,然后另外的页面就可以重新读取这个值
    • 记录访客的一些信息。利用Cookie,可以记录客户曾经输入的信息,或者记录访问网页的次数
    • 通过把所查看的页面存放在Cookie临时文件夹中,可以提高以后的浏览速度
  • 用户通过header以如下格式在客户端生成Cookie
    • Set-cookie:NAME=VALUE;[expires=DATE;][path=PATH;][domain=DOMAIN_NAME;][secure]
    • NAME为Cookie名称;VALUE为Cookie的值;expires=DATE为到期日;path=PATH、domain=DOMAIN_NAME为某个地址相对应的路径和域名;secure表示Cookie不能通过单一的HTTP连接传递

创建Cookie

  • 使用setcookie()函数
    • 语法格式:setcookie(名称,Cookie值,到期日,路径,域名,secure)
    • 其参数与Set-Cookie中的参数意义相同,其中如果到期日没有设定,则默认立即到期,即用户关闭浏览器时则删除Cookie数据
  • 此函数必须位于<HTML>标签之前,运行后会在cookies文件夹下自动生成一个Cookie文件夹

读取Cookie

  • 使用$_COOKIE变量取回Cookie的值
    • 例如:
    <?php
    //输出一个Cookie
    echo $_COOKIE["cookie名称"];
    //显示所有的Cookie
    print_r($_COOKIE);
    ?>
    
  • 可以通过isset()函数来确认是否已经设置了Cookie
    • 例如:
      <HTML>
      <BODY>
      <?PHP
       if(isset($_COOKIE["user"])){
        echo  "Welcome" . $_COOKIE["user"]."!<br />";
       }else{
          echo "Welcome guest!<br />";
        }
      ?>
      </BODY>
      </HTML>
      

删除Cookie

  • 在浏览器中手动删除
    • 由于Cookie自动生成的文本会存在于浏览爱情的cookies临时文件夹中,在浏览器中删除Cookie文件是比较快捷的方法
  • 使用函数删除
    • 删除Cookie仍然使用setcookie()函数。当删除cookie时,将第二个参数设置为空,第三个参数的过期时间设置为小于系统的当前时间即可
    • 例如:
      <?PHP
       setcookie("user","",time()-10);
      ?>
      
    • time()函数返回的是当前的系统时间,把过期时间减少10s,这样过期时间就会变成过去的时间,从而删除Cookie

认识Session

什么是Session

  • 由于HTTP是无状态协议,也就是说,HTTP的工作过程是请求与回应的简单过程,所以HTTP没有一个内置的方法来储存在这个过程中各方的状态。例如,当同一个用户向服务器发出两个不同的请求时,虽然服务器都会给予相应的回应,但是它没有办法知道这两个动作是由同一个用户发出的。因为,就有了会话(Session)管理机制。通过使用一个会话,程序可以跟踪用户的身份和行为,并且根据这些状态数据,给用户以相应的回应

Session的基本功能

  • 在PHP中,每一个Session都有一个ID。这个Session ID是一个由PHP随机生成的加密数字。这个SessionID通过Cookie储存在客户端浏览器中,或者通过URL传递至客户端。如果在某个URL后面看到一长串加密的数字,这很有可能是Session ID了
  • Session ID就像是一把钥匙,用来注册到Session变量中。而这些Session变量是储存在服务器端的。Session ID是客户端唯一存在的会话数据
  • 使用Session ID打开服务器端相应的Session变量,跟用户相关的会话数据便一目了然。在默认情况下,在服务器端的Session变量数据时以文件的形式加以储存的,但是会话变量数据也经常通过数据库进行保存

Cookie和Session

  • 在浏览器中,有些用户处于安全性的考虑,关闭了浏览器的Cookie功能,导致Cookie不能正常工作
  • 使用Session可以不需要手动设置Cookie,PHP Session可以自动处理。可以使用会话管理及PHP中的session_get_cookie_params()函数来访问Cookie的内容。这个函数将返回一个数组,包括Cookie的生存周期、路径、域名、secure等
    • 语法格式:session_get_cookie_params(生存周期,路径,域名,secure)

储存Session ID在Cookie或URL中

  • PHP在默认情况下使用Cookie来储存Session ID。但是如果客户端流量拿起不能正常工作,就需要使用URL方式来传递Session ID了。把php.ini中的session.use_trans_sid设置为启动状态,就可以自动通过URL来传递Session ID。
  • 不过通过URL传递Session ID会产生一些安全问题。如果这个链接被其它用户拷贝并使用,有可能造成判断的错误。其它用户可能使用Session ID访问目标用户的数据
  • 也可以通过程序把Session ID储存到常量SID中,然后通过一个连接传递

会话管理

创建会话

  • PHP自动创建
    • 用户可以在php.ini中设定session.auto_start为启动。但是,使用这种方法的同时,不能把Session变量对象化。应定义此对象的类必须在创建会话之前加载,然后新创建的会话才能加载此对象
  • 使用session_start()函数
    • 这个函数首先会检查当前是否已经存在一个会话,如果不存在,它将创建一个全新的会话,并且这个会话可以访问超全局变量$_SESSION数组。如果已经有一个存在的会话,函数会直接使用这个会话,加载已经注册过的会话变量,然后使用
    • 语法格式:session_start(void):bool
    • 此函数必须位于<HTML>标签之前
  • 使用session_register()函数
    • 在使用session_register()函数之前,需要在php.ini文件中将register_globals设置为on,然后需要重启服务器。此函数会通过为会话登记一个变量来隐含地启动会话

注册会话变量

  • 会话变量被启动后,全部保持在数组$_SESSION中。可以通过对$_SESSION数组赋值来注册会话变量
  • 例如:
<?PHP
session_start(); //启动Session
$_SESSION['name']='xiaoli'; //声明一个名为name的变量,并赋值xiaoli
?>
  • 这个会话变量值会在此会话结束或被注销后失效,或者还会根据php.ini中的session.gc_maxlifetime(当前系统设置为1440秒,也就是24小时)会话最大生命周期数过期而失效

使用会话变量

  • 使用会话变量,首先要判断会话变量是否存在一个会话ID。如果不存在,则需要创建一个,并且能够通过$_SESSION变量进行访问。如果已经存在,则将这个已经注册的会话变量载入,以供使用
  • 在访问$_SESSION数组时,先要使用isset()或empty()来确定$_SESSION中会话变量是否为空
    • 例如:
<?php
if(!empty($_SESSION['session_name'])){
$ssvalue=$_SESSION['session_name'];
}
?>
  • 存储和取回$_SESSION变量示例:
<?php
session_start();
//存储会话变量的值
$_SESSION['views']=1;
?>
<HTML>
<BODY>
<?php
//读取会话变量的值
echo "浏览量=".$_SESSION['VIEWS'];
?>
</BODY>
</HTML>

注销和销毁会话变量

  • 注销会话变量使用unset()函数就可以,如unset($_SESSION[‘name’])
  • 如果要注销所有会话变量,只需要向$_SESSION一个空数组就可以了,例如$_SESSION=array();。注销完成后,使用session_destroy()销毁会话即可,其实就是清楚相应的Session ID

Some Tips

如果浏览器不支持Cookie,该怎么办

  • 如果应用程序设计不支持Cookie的浏览器,不得不采取其他方法在应用程序中从一个页面向另一个页面传递信息。其中一种方式就是从表单传递数据

Cookie的声明周期是多久

  • 如果为设定有效时间,则默认为关闭浏览器则失效删除
  • 由于一些浏览器最多存储300个Cookie问津,每个Cookie文件最大支持4KB,所以一旦超过容量的限制,浏览器就会自动随机地删除Cookies

人已赞赏
PHP编程语言

【PHP学习笔记(九)】操作文件与目录

2020-3-31 18:54:24

DemoJava编程语言

【Java Demo】②.控制台五子棋

2020-4-1 21:59:10

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索