page contents

PHP会话控制机制中,Cookie和Session的应用,你更喜欢谁

为什么要使用会话控制 我们在上网时,访问每一个网页都需要使用HTTP协议来进行交互。但是HTTP协议是无状态协议,也就是说HTTP协议没有一个内建机制来维护两个事物之间的状态。 举个例子,当你...

为什么要使用会话控制

我们在上网时,访问每一个网页都需要使用HTTP协议来进行交互。但是HTTP协议是无状态协议,也就是说HTTP协议没有一个内建机制来维护两个事物之间的状态。

举个例子,当你登录一个网站后,再去浏览这个网站上的其他页面时,HTTP协议并不能告诉我们这两个请求是来自同一个用户,会被当做独立的请求,进而不能在不同的页面之间跟踪用户。

因此,会话控制的思想就是允许服务器跟踪同一个客户端做出的连续请求。此外,还可以对同一个请求者在多个页面之间进行共享数据

会话跟踪的方式

今天主要介绍以下两种会话跟踪的方式:

  1. 使用cookie将访问者的状态信息,存放在客户端的计算机中
  2. 使用session将访问者的状态信息,存放在服务器中

Cookie的应用

Cookie是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或硬盘上,在客户对该服务的请求中发回它。

1、向客户端中设置Cookie

Cookie的建立十分简单,只要用户的浏览器支持Cookie功能,就可以使用PHP内置的 setcookie()函数来建立一个Cookie。

Cookie是HTTP头的一部分,和其他 HTTP 头一样,必须在脚本产生任意输出之前发送 Cookie(由于协议的限制),因此setCookie()函数必须在其他信息被输出到浏览器之前调用。语法格式如下:

setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool

<?php

//使用setCookie()函数的全部参数设置

setcookie("TestCookie", "", time() + 3600, "/test/", "example.com", 1);

2、在PHP脚本中读取Cookie的内容

如果Cookie设置成功,客户端就有了Cookie文件,用来保存Web服务器为其设置的用户信息。

任何从客户端发送过来的Cookie信息,都被自动保存在 $_COOKIE全局数组中,所以在每个PHP脚本中都可以从该数组中读取相应的Cookie信息。

在设置Cookie的脚本中,第一次读取它的信息并不会生效,必须刷新或到下一个页面才能看到Cookie值。因为Cookie要先被设置到客户端,再次访问时才能被发送回来,这时才能被获取。

<?php

//输出Cookie中保存的所有用户信息

print_r($_COOKIE);

3、删除Cookie

删除保存在客户端的Cookie,有两种方法,而且这两种方法和设置Cookie一样,也是调用setcookie()函数实现删除的动作。

  • 省略setcookie()函数的所有参数列,仅导入第一个参数,Cookie的识别名称参数,来删除指定名称的Cookie信息。
  • 用setcookie()函数把目标Cookie设定为“已过期”状态,系统会自动删除该Cookie。

示例如下:

<?php

//只指定Cookie识别名称一个参数

setcookie("TestCookie"); //第一种方法

setcookie("TestCookie", "", time() - 1); //第二种方法

Session的应用

Session技术与Cookie相似,都是用来储存使用者的相关信息。但最大的不同之处在于Cookie是将数据存放在客户端,而Session则是将数据存放在服务器中

虽然Session存储在服务器端,但是客户端需要保存由服务器为用户创建的一个Session标识符即SessionID。

通常SessionID会保存在客户端的Cookie里,如果用户禁用Cookie的话,则可以将SessionID保存在URL中。

1、Session的声明与使用

在PHP中,必须调用session_start()函数,来启动session,语法格式如下:

session_start ([ array $options = array() ] ) : bool

session_start — 启动新会话或者重用现有会话

当第一次访问网站时,session_start()函数会创建一个唯一的Session ID,并自动通过HTTP的响应头,将这个Session ID 保存到客户端的Cookie中

同时,在服务器端创建一个以这个Session ID命名的文件。用于保存这个用户的会话信息。

2、注册会话变量和读取Session

在PHP中使用Session变量,除了必须要启动之外,还要经过注册的过程。注册和读取Session变量,都要通过访问$_SESSION全局数组完成。示例如下:

<?php

//Session的初始化

session_start();

//注册session变量

$_SESSION["username"] = "client";

$_SESSION["uid"] = 1;

//打印出session存储的信息

print_r($_SESSION);

3、注销变量与销毁Session

  • 调用session_destory()函数结束当前会话并清空会话中的所有资源
  • 使用unset()函数来释放在Session中注册的单个变量

session_destroy ( void ) : bool

unset ( mixed $var [, mixed $... ] ) : void

那么一个完整的session的注销的过程,如下所示:

<?php

//开启session并初始化

sesssion_start();

//第二步:删除所有session的变量,也可以用unset($_SESSION[void])逐个删除

$_SESSION = array();

//第三步,如果使用基于cookie的session,使用setcookie()删除包含sessionID的cookie

if (isset($_COOKIE[session_name()]) {

setcookie(session_name(), '', time() - 3600, '/');

}

//第四步,彻底销毁session

session_destory();

注意:$_SESSION = array(),清空$_SESSION数组的同时,也将对应的session文件内容清空,而使用session_destory()时,才将对应的session文件删除。

4、Session的自动回收机制

服务器保存的session文件就是一个普通的文本文件,所以都会有文件修改时间。而垃圾回收机制就是根据session文件的修改,将所有过期的session文件全部删除。

在php.ini中设置session.gc_maxlifetime选项来指定一个时间。

好啦,cookie和session的详细介绍就到这里了。相信你一定有所收获,我是#PHP程序媛#,努力向前,成长可见。

  • 发表于 2020-02-25 11:35
  • 阅读 ( 371 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章