COOKIE与SESSION的详解

 

cookie与session的小例子:

包含cookie记住登录名,session防止用户非法登录2个例子:

问我拿吧,这个下载连接挂了

描述

cookie过程描述

网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
用户第一次访问你的网站->在服务器端会将用户的信息设置为cookie(可以理解为制造饼干过程)->通过http协议发送给用户(浏览器),在用户端,cookie以文本的形式保存下来. 
用户第二次访问同一个网站-> 在http协议的请求头中会携带着cookie信息 -> 服务器对cookie进行验证 ->第二次响应 -> 猜你喜欢

 

session过程描述 :

当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时session_id,以cookie的形式传递给客户端浏览器,浏览器将这个session_id保存在内存中。
浏览器再次请求都会额外加上这个session_id(也即是cookie的值),服务器根据这个session_id,在服务端来判断使用哪个session文件.

 

COOKIE与SESSION区别:

 

一. COOKIE

下面是cookie在浏览器和服务器中请求与响应的过程:

 

 

 

1.    COOKIE的工作原理

cookie过程描述

网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

用户第一次访问你的网站->在服务器端会将用户的信息设置为cookie(可以理解为制造饼干过程)->通过http协议发送给用户(浏览器),在用户端,cookie以文本的形式保存下来.

用户第二次访问同一个网站-> 在http协议的请求头中会携带着cookie信息 -> 服务器对cookie进行验证 ->第二次响应 -> 猜你喜欢

 

set_cookie.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>设置COOKIE</h1>
    <?php 
        //设置cookie
        //Setcookie(名称,值,过期时间,有效路径,有效域名)
        setcookie('name','admin94324239',time()+2222,'/','.abc.com'); 
     ?>
</body>
</html>

get_cookie.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>获取COOKIE</h1>
    <?php 
        echo $_COOKIE['name'];
     ?>
</body>
</html>

 

 

2.    设置COOKIE

         创建语法:

       

setcookie(名称,值,过期时间,有效路径,有效域名)

 

         说明:

1)        名称, 字符串,  为取出cookie的值服务.

2)        值, 注意值的类型.(必须为string类型) 

3)        过期时间, time()+秒数

设置cookie的有效期为一周:

注意!

4)        有效路径, 指的是在哪个路径下可以将cookie的值取出

         默认情况下,是当前页面所在的目录及其子目录有效的.

5)        有效域名, 指的是在哪个域名下可以将cookie的值取出

         说明: 默认情况下是当前的主域名. 如www.abc.com

 

3.    读取COOKIE

   直接通过超全局数组下标读取

   

echo $_COOKIE[‘cookie的名称’]

4.    删除COOKIE的方法

1)              将cookie的有效时间过期即可.

setcookie(名,值,time()-1)

setcookie(名,值,time()-9999999);

setcookie(名)

 

5.    实例:自动记录登录的用户名

前台页面:

后台处理页面:

 

 

二.SESSION

1.    SESSION的工作原理

下面是在浏览器详细的工作过程:

session过程描述 :

当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时session_id,以cookie的形式传递给客户端浏览器,浏览器将这个session_id保存在内存中

浏览器再次请求都会额外加上这个session_id(也即是cookie的值),服务器根据这个session_id,在服务端来判断使用哪个session文件.

从下面可以看出session与cookie息息相关:

设置session:

获取session:

以上代码:

set_session.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<h1>设置session</h1>
<?php 
//开启session
session_start();
//创建session
$_SESSION['username'] = 'itcast_china';


 ?>
</body>
</html>

get_session.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<h1>获取session</h1>
<?php 
//开启session
session_start();
//获取session
echo $_SESSION['username'];
 ?>
</body>
</html>

2.    开启SESSION会话功能

(1)在创建session之前必须先开启会话

(2)方法: session_start();

(3)位置: 原则开启之前只要不超过4KB都可以开启. 建议,在当前页面的最前面开启.

(4)在一个页面中,只能开启一次.

(5)Session_start(); //在开启时会判断,当前会话是否已经开启,如果已经开启则不会再生成一个id号.

(6)不管是创建session,还是使用(判断,删除等)session都必须先开启.

3.    获取当前的SESSION的ID值

1 echo session_id(); 

4.    添加SESSION数据

        

(1)$_SESSION['名称'] = 值

session的值可以是多类型的:

5.    读取SESSION数据

  数组通过下标(session名称)获取值.

1 <?php 
2 //开启session
3 session_start();
4 //获取session
5 echo $_SESSION['username'];
6  ?>

6.    删除SESSION数据

(1)unset  //销毁变量

1 unset($_SESSION[名])

 

(2)session_destroy();  //删除当前的session文件

 

  彻底删除session,  两个函数接合使用.

 

7.    实例:防止用户非法登录

看小例子

8.问题:

 

如果用户将浏览器的cookie禁用,问session还能使用吗?为什么?如何解决?

 

答:不能使用. 因为session是基于cookie的.

解决方法:

自己来传session_id即SID:

test.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<h1>禁止cookie怎么办?</h1>
<?php 
session_start();
$_SESSION['username'] = 'abc';
 ?>
 <a href="test.php?<?php echo SID; ?>">自己来传!</a>
</body>
</html>

index.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<h1>获取SID并设置为当前的session_id</h1>
<?php 
//从地址栏中得到session_id,并设置为当前的session_id;
if(isset($_GET['PHPSESSID'])){
    //设置为当前的session_id
    session_id($_GET['PHPSESSID']);
}
session_start();
echo $_SESSION['username'];

 ?>
</body>
</html>

 

 

 

9.    SESSION的垃圾回收:

什么是SESSION的垃圾回收?

SESSION垃圾回收时间(session.gc_maxlifetime),

回收的概率(session.gc_probability, session.gc_divisor)

在php.ini中:

三.SESSION相关配置

session.name = PHPSESSID
session.auto_start =0 // 0 表示不开启.
session.cookie_lifetime=0   //代表浏览器关闭,会话结束
session.cookie_path=/     //指定了要session会话 cookie 的有效路径
session.cookie_domain    //指定了要session会话 cookie 的有效域名
脚本设置:
    (a)ini_set('session.cookie_path', '/');
    (b)ini_set('session.cookie_domain', '.mydomain.com');
    (c)ini_set('session.cookie_lifetime','1800');"

 例子:设置10内有效的session

//set_session.php  设置10秒内有效的session
<?php
session_start();
ini_set('session.cookie_lifetiem','10');
session_start();
$_SESSION['username'] = 'abc';
?>


//get_session   获取10秒内有效的session
<?php
session_start();
echo $_SESSION['username'];

?>

 

 

 

         

posted @ 2017-09-11 23:12  QinXiao.Shou  阅读(621)  评论(0编辑  收藏  举报