PHP基础------会话控制

1. 什么是会话

    

 

 其中: 逻辑关联是有一定顺序的, 不能是先有"结算"再有"下单".

2. 会话存在的意义

 

3. 会话是如何工作的

 

 

4. 会话控制的内容

 

 

5. 会话控制的几种方式

 

 

  (1). 使用cookie实现会话控制:

    

 

 

  (2). 使用 session实现会话控制:

    

 

 

  (3). 其他:

    

 

 

---------------------------------------------------------------------------------------------------------------

①基于cookie的会话控制

----------------------------------------------------------------------------------------------------------------

cookie相关的知识点:

  1. 在客户端,一个浏览器能创建的 Cookie 数量最多为 300 个,并且每个不能超过 4KB,

      每个 Web 站点能设置的 Cookie 总数不能超过 20 个

  2. cookie存储在用户本地浏览器上

  3. 用户可以更改cookie的配置,安全性低 

  4. cookie的保存可以进行时间限定

-------------------------------------------------------------------------------------------------------------------

1. cookie的工作原理:

  (1)在HTTP响应中设置cookie----->(2)在cookie的有效期内, 每次请求都会携带cookie的值----->(3)服务器识别并处理cookie的内容

2. cookie的生命周期:

  (1)在HTTP响应中设置cookie:通过set-cookie指令设置cookie, 可以设置cookie的内容, 有效期, 有效路径等内容. 

  例如:

    

 

   (2)在cookie的有效期内, 每次请求都会携带cookie的值: 只可访问域名相同, 路径匹配并在有效期内的cookie, 

    通过cookie指令发送具有访问权限的cookie值, 多个cookie的值用" ; "隔开.

    例如:

     

 

       其中: 第二个cookie的名字为user, 内容为admin........

  (3). cookie失效:

   ①cookie自动过期

   ②用户手动在浏览器中清除cookie信息(.....设置->高级->删除cookie.....)

   ③服务器通过设置cookie的过期时间来控制cookie的有效性(将cookie过期时间设置为过去的时刻)

  (4). 删除cookie:

   ①. 省略setcookie()函数的参数的除第一个参数(cookie名称)之外的所有列设置为空值, 这样就删除了名为XXX的cookie了;

   ②. 利用setcookie()函数将cookie设置为已过期的状态(第二个参数设置为空, 第三个参数设置为当前时间-1即可);

   ③. 把失效时间设置为0

 

3.cookie的使用:

  (1) . 设置和修改cookie的值

    bool setcookie( string $name, [, string value="" [, int $expires = 0 [, string $path = "" [, string $domain = "“ [, bool $secure = FALSE [, bool $httponly = FALSE] ] ] ] ] ]);

 参数解释:  

  setcookie() 函数向客户端发送一个 HTTP cookie。

  cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。

  cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。

  必须在任何其他输出发送前对 cookie 进行赋值。

  如果成功,则该函数返回 true,否则返回 false。

参数 描述
name       必需。规定 cookie 的名称。
value 必需。规定 cookie 的值。
expire 可选。规定 cookie 的有效期。默认为0, 表示浏览器关闭时cookie失效
path 可选。规定 cookie 的服务器路径。默认为空, 表示当前路径
domain 可选。规定 cookie 的域名。默认为空, 表示当前的域名
secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。默认为FALSE, 若设置TRUE, 表示当前cookie只会在HTTPS安全环境中才会发送
httponly

可选, 表示是否启用访问限制, 默认为FALSE, 若设置为TRUE, 表示无法通过脚本(如:JavaScript)来访问cookie的值, 只能通过HTTP协议来访问cookie的值

 

 

 

 

 

 

例如: 

<?php
$result = setcookie('username', 'admin', time()+60, "/", 'localhost');
if( $result ){
    echo '设置成功!';
}else{
    echo '设置失败!';
}
?>

结果:

 

 

 

 在使用setcookie()函数时, 对于某些特殊字符, 如 "+"号, 将会被编码成特殊的符号, 但是对于已经编码的字符, 在服务器进行解码时也会被还原成原来的字符

如果在cookie中也不想这些字符被编码, 那么可以使用setrawcookie()函数.

例如:

使用setcookie():

<?php
$result = setcookie('username', '1+1=3', time()+60, "/", 'localhost');
//$result = setcookie('username', '1+1=3', time()+60, "/", 'localhost');
if( $result ){ echo '设置成功!'; }else{ echo '设置失败!'; } ?>

 

 将setcookie()函数改为setrawcookie():

 

 

4. 获取cookie的值:

  使用: $_COOKIE["username"];

5. cookie的使用限制:

  setcookie()函数定义了cookie, 会和剩下的http头一起发送给客户端. 和其它http头一样, 必须在脚本产生输出前发送

  cookie(由于相关协议的限制), 因此, 要使用setcookie()函数, 必须在任何输出之前(包过<html>和<head>或者空格)调用本函数.

  PHP5.4之后, 默认开启了输出缓冲区(定义在php.ini文件中), 控制php的输出, 当输出缓冲区开启的时候, 可以随意输出任何内容

  这些内容都会被暂时存放在缓冲区中, 当脚本执行完成之后, php再将所有的缓冲区的内容组装成合法的http响应发送给客户端

  因此, 即使在调用setcookie()函数之前, 已经输出了一些内容,  在组装成合法内容时, 也能被正确的组装在响应头中发送.

 6. cookie使用中的安全建议:

  (1). 设置合理的过期时间

  (2). 设置必要的访问路径

  (3). 设置合理secure和httponly属性

-------------------------------------------------------------------------------------------------

②. 基于session的会话控制

  session通常被翻译成"时域", 为一个终端用户与交互系统进行通信的时间间隔, 一般指从注册进入系统到注销退出系统之间所经过的时间. Web中指用户在浏览某个网站所花费的时间.

  A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。

  session存储在服务端。

  session可以解决http短连接问题

session的工作原理:

  • 一个session第一次被启用时, 一个唯一的标识被存储于本地的cookie中.
  • 使用session_start()函数, PHP从session仓库中加载已经存储的session变量.
  • 当执行PHP脚本时, 通过session_register()函数注册session变量.
  • 当PHP脚本, 执行结束时, 未被销毁的session变量会被自动保存在本地一定路径下session库中, 这个路径可以通过php.ini文件中的session.save_path指定, 下次浏览网页是可以加载使用.

  

session的生命周期:

  ①.启用并设置session, 在http响应中设置客户端的唯一cookie, 将对应的session写入临时文件(服务器端)

  ②. 服务器读取并处理session,  客户端在http请求中携带cookie的值, 服务器通过cookie值定位到session文件, 读取并处理session文件的内容

  ③. session失效/清除(或用户手动删除cookie)

 

session的使用:

  1. session_start()函数: 启用session.

     实例化session, 然后设置session下的name值为admin, 代码:

  

<?php
session_start();

$_SESSION['user'] = 'admin';

?>

  读写session: 使用$_SESSION数组将数据存入同名session文件中, 代码:

<?php
session_start();

//$_SESSION['user'] = 'admin';

$_SESSION['user'] = array(
    "username" => 'admin',
    "age" => 12
);

var_dump($_SESSION);

 

  2. 获取和设置session: string session_name([string name]);

   获取和设置sessionID: string session_id([string $id);

   获取和设置session文件的保存路径: string session_save_path([string $path]);

   设置session中的cookie参数: bool session_set_cookie_params(int $lifetime [, string $path [, string $domain [, bool $secure = FALSE [, bool $httponly = FALSE]]]]);

  

  3. 清空session的内容:

   bool session_unset(void);

   通过赋值的方式清空session    方法:$_SESSION = array();

  4. 删除session(不仅仅是清空session, session文件也会被删除): bool session_destroy(void);

--------------------------------------------------------------------------------------------------------------------

cookie和session的比较:

  相同点:

    1. 是http协议的一个补充机制, 可以实现会话控制.

    2. 可以标记用户, 客户端, 可以存储数据.

  不同点:

    1. 存储方式不同, cookie将数据存储到客户端里(浏览器), session将 数据存储在服务端(PHP临时目录)

    2. 工作方式不同, cookie中利用http协议直接传输会话数据, session利用sessionID来定位会话数据(session中的数据更加私密)

    3. 存储内容不同, cookie只可以存储简单的数据(例如:字符串), session可以存储复杂的数据(例如: 数组, 对象)

 

posted @ 2019-10-07 16:44  Streamice96  阅读(199)  评论(0编辑  收藏  举报