美文网首页
session和cookie

session和cookie

作者: Maiiiiiiiiiiiid | 来源:发表于2019-04-28 12:45 被阅读0次

session和cookie

[TOC]


session和cookie的原理

session好比超市的储物柜,cookie好比顾客的口袋,当用户请求时,储物柜返回一张写着编码的便条纸(session_id),用户就把便条放入口袋(cookie),一个用户(浏览器)对应于一个储物盒(session文件),用来存放用户的物品

原理图:

graph TB
用户1--请求session_id-->服务器
服务器--分配session_id-->用户1
用户2--请求session_id-->服务器
服务器--分配session_id-->用户2

服务器-->用户1文件
服务器-->用户2文件

    style 用户1 fill:#f9f,stroke:#333,stroke-width:4px,fill-opacity:0.5    
    style 用户2 fill:#f9f,stroke:#333,stroke-width:4px,fill-opacity:0.5
    style 用户1文件 fill:#f9f,stroke:#333,stroke-width:4px,fill-opacity:0.5    
    style 用户2文件 fill:#f9f,stroke:#333,stroke-width:4px,fill-opacity:0.5
    style 服务器 fill:#ccf,stroke:#f66,stroke-width:2px,stroke-dasharray: 10,5

session文件存放位置:php.ini `

session.save_path="D:\code\phpSstudy\tmp\tmp"

session_start()

sess_f5b3tei2q8ankm24vm95ot5r12

cookie 名字一样后面

代码为:

$_SESSION['ff']=2;

时,火狐访问,对应的cookie->session文件中:

ff|i:2;

代码为:

$_SESSION['ch']=3;

时,谷歌访问,对应的cookie->session文件中:

ch|i:3;

代码为:

setcookie("firefox",'55');

Response Cookie:

Name Value
firefox 55

代码为:

setcookie("chrome",'66');

Response Cookie:

Name Value
chrome 66

session 在服务器的某个位置

cookie在用户浏览器里面 session_Id存储在cookie里面


session

命名空间:

use think\Session;

session配置:

'session'                => [
    'id'             => '',
    // SESSION_ID的提交变量,解决flash上传跨域
    'var_session_id' => '',
    // SESSION 前缀
    'prefix'         => 'think',
    // 驱动方式 支持redis memcache memcached
    'type'           => '',    //存储方式,默认是文件存储
    // 是否自动开启 SESSION
    'auto_start'     => true,
],

使用session

实际上是操作$_SESSION数组

Session::set('name','66666','think2');
        //name value prefix(前缀/作用域)
        //第三个参数不填时默认是配置中的"prefix"的值"think"
echo "\n";
print_r($_SESSION);
exit;

输出:


Array ( 
    [think2] => Array
        ( 
            [name] => 66666 
        ) 
)

session文件:

think2|a:1:{s:4:"name";s:5:"66666";}
//判断作用域下面元素的值是否存在
Session::has('name','think2'); //name不存在就不显示,否则显示1
                    //参数2不写默认配置中的"prefix"的值"think"
Session::has('name.item','think2');
//获取作用域下面元素的值
Session::get('name','think2');
Session::get('name.item','think2');

echo $this->request->session('name');

//设置作用域下面元素的值
Session::set('name','value','think2');
Session::set('name.item','value','think2');
                        //$name['item']=value
//删除作用域下面元素的值
Session::delete('name','think2');
Session::delete('name.item','think2');
//清除作用域
Session::clear('think2');

助手函数:

//设置
session('name','thinkphp','prefix');
//判断
session('?name','','prefix');
//获取
session('name','','prefix');
//清除
session('name',null,'prefix');
//清除作用域
session(null,'prefix');

在模板文件中使用session:

{Request.session.name}

cookie

cookie存在于客户端

命名空间:

use think\Cookie;

cookie的配置:

'cookie'                 => [
    // cookie 名称前缀
    'prefix'    => '',
    // cookie 保存时间
    'expire'    => 0,
    // cookie 保存路径
    'path'      => '/',
    // cookie 有效域名
    'domain'    => '',
    //  cookie 启用安全传输
    'secure'    => false,
    // httponly设置
    'httponly'  => '',
    // 是否使用 setcookie
    'setcookie' => true,
],

cookie操作

实际上是操作$_COOKIE数组

//设置
Cookie::set('name','value',3600);//name value option[time/s]
//指定前缀
Cookie::set('name','value',['prefix' => 'think_','expire' => 7200]);
//支持数组
Cookie::set('name',['v1','v2','v3','v4']);

//获取
Cookie::get('name','prefix');
$this->request->cookie('name');

//判断
Cookie::has('name','prefix');
//删除
Cookie::delete('name','prefix');
//清空前缀的
Cookie::clear('prefix');

函数助手:

//初始化
cookie(['prefix' => 'think_','expire' => 3600]);
//设置
cookie('name','value',3600);
//获取
cookie('name');
//判断
cookie('?name');
//删除
cookie('name',null);
//清空前缀的
cookie(null,'prefix');

相关文章

网友评论

      本文标题:session和cookie

      本文链接:https://www.haomeiwen.com/subject/exjdnqtx.html