计算机网络/计算机科学与应用/系统/运维/开发

PHP cookie session技术

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();


php cookie session

只有惜缘,才有缘分;只有惜友,才有友谊。

评论

^