PHP Cookie Session技术
一、Cookie 管理
1、什么是Cookie?
Cookie是一种在远程浏览器端存储数据并以此来跟踪和识别用户的机制。
简单地说,Cookie是Web服务器暂时存储在用户硬盘上的一个文本文件,
并随后被Web浏览器读取。
当用户再次访问Web网站时,
网站通过读取Cookies文件记录这位访客的特定信息
(如上次访问的位置、花费的时间、用户名和密码等),
从而迅速做出响应,如在页面中不需要输入用户的ID和密码即可直接登录网站等
文本文件的命令格式如下:
用户名@网站地址[数字].txt
2、Cookie功能:
记录访客的某些信息(记录访客的某些信息。
如可以利用Cookie记录用户访问网页的次数,或者记录访客曾经输入过的信息,
另外,某些网站可以使用Cookie自动记录访客上次登录的用户名。)
在页面之间传递变量(浏览器并不会保存当前页面上的任何变量信息,
当页面被关闭时页面上的所有变量信息将随之消失。
如果用户声明一个变量id=8,要把这个变量传递到另一个页面,
可以把变量id以Cookie形式保存下来,然后在下一页通过读取该Cookie来获取变量的值)
将所查看的Internet页存储在Cookies临时文件夹中,可以提高以后浏览的速度
注意:
一般不要用Cookie保存数据集或其他大量数据。
并非所有的浏览器都支持Cookie,
并且数据信息是以明文文本的形式保存在客户端计算机中,
因此最好不要保存敏感的、未加密的数据,否则会影响网络的安全性
3、创建Cookie
通过setcookie()函数创建Cookie
Cookie是HTTP头标的组成部分,而头标必须在页面其他内容之前发送,它必须最先输出
在setcookie()函数前输出一个HTML标记或echo语句,甚至一个空行都会导致程序出错
bool setcookie(string name[,string value[, int expire [, string path [, string domain[,int secure]]]]] name: Cookie 变量名 可以通过$_COOKIE["cookiename"]调用变量名为cookiename的Cookie value:Cookie变量值 expire:Cookie失效时间 path:Cookie在服务器端有效路径 domain:Cookie有效域名 secure:指明Cookie是否仅通过安全的HTTPS,值为0或1
使用setcookie() 函数创建Cookie
setcookie("TMCookie",' // 设置Cookie有效时间为60秒 setcookie("TMCookie",' // 设置有效时间为1小时,有效目录为"/tm/" 有效域名为mrbccd.com及所有子域名 setcookie("TMCookie",'www.mrbccd.com',time()+3600,"/tm/",".mrbccd.com",1);
4、读取Cookie
直接通过超级全局数组$_COOKIE[] 来读取浏览器端的Cookie值
// 检测Cookie文件是否存在,如果不存在 if(!isset($_COOKIE["visittime"])){ // 设置一个Cookie变量 setcookie("visittime",date("y-m-d H:i:s")); echo "欢迎你第一次访问网站"; }else{ // 如果Cookie存在 // 设置保存Cookie有效时间的设置 setcookie("visittime",date("y-m-d H:i:s"),time()+60); // 输出上次访问网站的时间 echo "您上次访问网站的时间为:".$_COOKIE["visittime"]; } echo "您本次访问网站的时间为:".date("y-m-d H:i:s"); //您上次访问网站的时间为:21-11-25 10:18:27您本次访问网站的时间为:21-11-25 10:18:282www.mrbccd.com
注意:
如果未设置Cookie的到期时间,则在关闭浏览器时自动删除Cookie数据。
如果为Cookie设置了到期时间,浏览器将会记住Cookie数据,
即使用户重启计算机,只要没到期,再访问网站时也会获得信息
5、删除Cookie
当Cookie被创建后,如果没有设置它的失效时间,
其Cookie文件会在关闭浏览器时被自动删除。
如果要在关闭浏览器之前删除Cookie文件,
方法有两种:一种是使用setcookie()函数删除,另一种是在浏览器中手动删除Cookie
a、使用setcookie()函数删除Cookie
删除Cookie只需要将setcookie()函数中的第二个参数设置为空值,
将第三个参数Cookie的过期时间设置为小于系统的当前时间即可
setcookie("name","",time()-1);
time()函数返回以秒表示的当前时间戳,把过期时间减1秒就会得到过去的时间,
从而删除Cookie
把过期时间设置为0,可以直接删除Cookie
b、在浏览器中手动删除Cookie
6、Cookie的生命周期
如果Cookie不设定时间,就表示它的生命周期为浏览器会话的期间,
只要关闭IE浏览器,Cookie就会自动消失。
这种Cookie被称为会话Cookie,一般不保存在硬盘上,而是保存在内存中
如果设置了过期时间,那么浏览器会把Cookie保存到硬盘中,
再次打开IE浏览器时会依然有效,直到它的有效期超时
虽然Cookie可以长期保存在客户端浏览器中,但也不是一成不变的。
因为浏览器最多允许存储300个Cookie文件,
而且每个Cookie文件支持最大容量为4KB;
每个域名最多支持20个Cookie,
如果达到限制时,浏览器会自动地随机删除Cookies
二、Session管理
Session会话是存储在服务端的,比较安全,并且不像Cookie那样有存储长度的限制
1、了解Session
HTTP是无状态协议,也就是说HTTP的工作过程是请求与回应的简单过程,
所以HTTP没有一个内置的方法来存储这个过程中各方的状态。
比如,当同一个用户向服务器发出两个不同的请求时,虽然服务器端都会给以相应的回应,
但是它并没有办法知道这两个动作是由同一个用户发出的。
2、创建Session步骤
启动会话→注册会话→使用会话→删除会话
启动会话 session_start()
session_start( options );
options参数是一个关联数组,如果提供,那么会用其中的项目覆盖会话配置指示中的配置项
一般session_start()函数在页面开始位置调用,然后会话变量被传入到$_SESSION
创建会话三步骤:
自动创建、调用session_start()函数来创建和调用session_register()函数来创建
a、自动创建
在php.ini中开启 session.auto_start = 0 但是使用这种方法的同时不能把Session变量对象化。
应定义此对象的类,必须在创建会话之前加载,然后新创建的会话才能加载此对象
b、调用session_start()函数来创建
函数首先检查当前是否已经存在一个会话,如果不存在,它将创建一个全新的会话,
并且这个会话可以访问超全局变量$_SESSION数组。
如果已经有一个存在的会话,函数就会直接使用这个会话加载已经注册过的会话变量,然后使用
session_start(); session_start()函数必须位于<html>标签之前
c、调用session_register()函数来创建
调用session_register()函数之前,需要在php.ini文件中将register_globals设置为on,
然后需要重启服务器。
session_register()函数通过为会话登录一个变量来隐含地启动会话
注册会话变量
会话变量被启动后,全部保存在数组$_SESSION中。
用户可以通过对$_SESSION数组赋值来注册会话变量
<?php session_start(); // 声明一个名为admin的变量,赋值为session $_SESSION["admin"] = "session";
注意
1、可以使用session_save_path()函数来查看Session保存的位置
2、会话结束或注销后或者超过24小时 生命周期就会失效
php.ini 配置中 session.gc_maxlifetime = 1440
使用会话
首先判断会话变量是否存在,如果不存在,就创建一个且通过$_SESSION变量进行访问
如果存在,则将这个会话变量载入,即可使用
使用前,先调用isset()或empty()函数来确定$_SESSION中会话变量是否为空
<?php // 判断会话变量是否为空 if(!empty($_SESSION['session_name'])); // 声明一个ssvalue变量 $ssvalue = $_SESSION['session_name'];
删除会话变量
调用unset()函数即可
// 注销会话变量 unset($_SESSION['views']);
注销所有会话变量
向$_SESSION赋值一个空数组即可
//注销所有会话变量 session_destroy();