Session的使用
下面使用靜態方法調用Session;推薦使用$_SESSION(查看全部session),可以更好了解session的作用域
//賦值 Session::set('name','s1'); //賦值think2作用域,set(‘名稱’,‘值’,‘作用域’) Session::set('name','s2','think2'); //判斷當前作用域(think)是否賦值 echo Session::has('name'); //判斷think2作用域是否賦值 echo Session::has('name','think2'); //取值,當前作用域(think) echo Session::get('name'); //取值(think2作用域) echo Session::get('name','think2'); // 二維數組,賦值(當前作用域) Session::set('name2.item','thinkphp'); // 判斷(當前作用域)是否賦值 Session::has('name2.item'); // 取值(當前作用域) Session::get('name2.item'); //刪除(當前作用域) Session::delete('name'); //刪除(think2作用域) Session::delete('name','think2'); //清除(當前作用域) Session::clear(); //清除(當前作用域) Session::clear('think2'); echo '<pre>'; print_r($_SESSION);
函數助手調用Session
// 賦值(當前作用域) session('name', 'thinkphp'); echo $this->request->session('name'); // 賦值think作用域 session('name', 'thinkphp', 'think'); // 判斷(當前作用域)是否賦值 echo session('?name'); // 取值(當前作用域) echo session('name'); // 取值think作用域 echo session('name', '', 'think'); // 刪除(當前作用域) session('name', null); // 清除session(當前作用域) session(null); // 清除think作用域 session(null, 'think'); echo "\n"; print_r($_SESSION);
設置有效時間:
//方法一:application/index/config.php(全局設置) 'session' => [ 'id' => '', // SESSION_ID的提交變量,解決flash上傳跨域 'var_session_id' => '', // SESSION 前綴 'prefix' => 'index', // 驅動方式 支持redis memcache memcached 'type' => '', // 是否自動開啟 SESSION 'auto_start' => true, //過期時間 單位秒 'path'=>TEMP_PATH,//表示session保存在自己網站根目錄中的runtime目錄中 'expire'=>3600*24*30,//過期時間 ], //方法二:控制器 session(array('user'=>$user,'expire'=>3600)); //方法三:控制器 Session::init([ 'expire'=>60*60*12 ]); Session::set("token",$access_token);
注意: 如果expire => 0,則默認session的過期時間
Cookie的使用
下面使用靜態方法調用Cookie;推薦使用$_COOKIE(查看全部cookie)
//設置Cookie 有效期為 3600秒 Cookie::set('user_name','TPshop 團隊',3600); // 設置cookie 前綴為think_ Cookie::set('user_name','TPshop 老師',['prefix'=>'think_', 'expire'=>3600]); // 支持數組 Cookie::set('Teacher',['zhang','wang','chen','peng']); echo Cookie::get('user_name'); // 也支持使用Cookie類直接讀取 echo "<br/>"; // 獲取指定前綴的cookie值 echo Cookie::get('user_name','think_'); echo "<br/>"; // 建議的讀取Cookie數據的方法是通過Request請求對象的cookie方法 echo $this->request->cookie('user_name'); echo "<br/>"; //判斷 echo Cookie::has('user_name'); echo "<br/>"; //判斷指定前綴的cookie值是否存在 echo Cookie::has('user_name','think_'); echo "<br/>"; //刪除cookie Cookie::delete('user_name'); // 刪除指定前綴的cookie Cookie::delete('user_name','think_'); // 清空 // 清空指定前綴的cookie Cookie::clear('think_');
使用函數助手調用Cookie
// 助手函數 // 初始化 cookie(['prefix' => 'think_', 'expire' => 3600]); // 設置 cookie('name', 'value123', 3600); // 判斷 echo cookie('?name'); echo "<br/>"; // 獲取 echo cookie('name'); echo "<br/>"; // 刪除 cookie('name', null); // 清除 cookie(null, 'think_');
設置有效時間:
//方法一:在控制器 cookie初始化 Cookie::init(['prefix'=>'think_','expire'=>3600,'path'=>'/']); // 方法二:設置Cookie 有效期為 3600秒 Cookie::set('name','value',3600); //方法三:config.php設置 'cookie' => [ // cookie 名稱前綴 'prefix' => '', // cookie 保存時間 'expire' => 0, // cookie 保存路徑 'path' => '/', // cookie 有效域名 'domain' => '', // cookie 啟用安全傳輸 'secure' => false, // httponly設置 'httponly' => '', // 是否使用 setcookie 'setcookie' => true, ],
注意:'expire' => 0,默認cookie的過期時間為關聯瀏覽器
session或cookie無效
一般情況下session和cookie都有效的,但今天我遇到了session和cookie不能保存數據。
這種情況一般是config.php的設置的問題,下面讓大家看看我發現的問題:
這里設置里有效域名x.com,但我當前的域名是ljt.com;知道問題就好解決,只要把有效域名改成ljt.com,或者domain => "" 什么都不寫
總結
session:存放在服務器
cookie:存放在瀏覽器
Cookies生存期限就到你關閉瀏覽器為止