第118講 session② 獲取session 更新session 刪除session session細節和原理深入
阿新 • • 發佈:2018-11-20
注意所有取session之前都要判斷是否為null
<?php header("content-type:text/html;charset=utf-8"); echo "<br/>***如何獲取session資料***<br/>"; //初始化session session_start(); //獲取session //1、把所有的session獲取出來 echo "<pre>"; print_r($_SESSION); echo "</pre>"; //2、通過鍵指定獲取某個值 echo "儲存的名字是".$_SESSION['name']; echo "<br/>陣列的資料是:"; $arr1 = $_SESSION['arr1']; for ($i = 0; $i < count($arr1); $i++) { echo "<br/>-----".$arr1[$i]; } echo "<br/>"; //取出物件 echo "<br/>取出物件"; $dog = $_SESSION['dog']; echo "狗:".$dog->dogname;
如上方式取物件 物件取出位置報錯
取出物件 Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Dog" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in D:\phpStudy\WWW\SessionTest\session2.php on line 23 狗:
<?php require_once 'Pet.php'; header("content-type:text/html;charset=utf-8"); echo "<br/>***如何獲取session資料***<br/>"; //初始化session session_start(); //獲取session //1、把所有的session獲取出來 echo "<pre>"; print_r($_SESSION); echo "</pre>"; //2、通過鍵指定獲取某個值 echo "儲存的名字是".$_SESSION['name']; echo "<br/>陣列的資料是:"; $arr1 = $_SESSION['arr1']; for ($i = 0; $i < count($arr1); $i++) { echo "<br/>-----".$arr1[$i]; } echo "<br/>"; //取出物件 //取出物件前先重新宣告一下物件就不會報下邊那個錯了 可以把類重新寫一遍 /** * 取出物件 Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Dog" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in D:\phpStudy\WWW\SessionTest\session2.php on line 23 狗: * Enter description here ... * @author Administrator * */ class Dog{ public $dogname; public $sex; } echo "<br/>取出物件"; $dog = $_SESSION['dog']; echo "狗:".$dog->dogname; echo "<br/>取出pet物件<br/>"; $pet = $_SESSION['pet']; echo "取出的pet物件".$pet->petName;
如上取物件的時候引入宣告也是可以的 如上邊的pet物件
更新session資料:
<?php
header("content-type:text/html;charset=utf-8");
echo "<br/>***演示更新session資料***<br/>";
session_start();//初始化session;
$_SESSION['name']="12345678dd";//如此這般按照對應的鍵重新儲存一下就直接重新整理了
echo "重新整理成功!";
刪除session資料
<?php
header("content-type:text/html;charset=utf-8");
echo "<br/>***演示刪除session資料***<br/>";
session_start();//初始化session
//1、刪除某一個鍵值對key<==>val
unset($_SESSION['name']);
//2、刪除所有鍵值對
session_destroy();//刪除當前瀏覽器對應的session檔案----不會刪除別人瀏覽這個介面的session(只刪除自己開啟瀏覽器的session)
echo "刪除session成功";
一個瀏覽器對應一個session 本機 假如開了三個瀏覽器程序,那麼三個瀏覽器程序對應這三個session檔案
測試:
- 本機 一個google瀏覽器 一個 ie 瀏覽器 一個 360瀏覽器(可以一個瀏覽器開三個程序 我電腦剛好有三個瀏覽器直接開啟測試了)
全都執行都可以看到session
依次開啟瀏覽器開啟對應的url依次生成對應瀏覽器程序的session檔案
相應的清除session就得用對應的瀏覽器程序清除
不過貌似session有預設儲存時間限制到時間自動清理(沒試過)
如下圖:
小結:
- 1、如果需要使用session,必須要初始化
即session_start(); - 2、session檔案中可以放入多個鍵值對,注意,鍵不能重複
- 3、如果我們要取出物件,則事先宣告下就好 如上pet
session 的細節討論
- ①session 檔案預設存放時間是1400s,這個時間可以通過php.ini來修改 ,如下值是可以修改的
session.gc_maxlifetime = 1440
如上時間指的是在1440s內沒有使用過session檔案,如此該session檔案才會被當做垃圾進行回收
- ②session檔案的存放路徑是可以修改的,一樣在php.ini中
如下
;session.save_path = "/tmp"
session.save_path = "D:\phpStudy\tmp"
在php手冊中php.ini所有配置資訊位置
所有配置更新後都要重新啟動Apache。
session基本使用圖解
相同內容不同檔案 同一瀏覽器訪問的話。會生成一個統一的
Cookie:PHPSESSID=urskaqg254e51riu9tmv7f66g1
然後會看到
http://localhost//SessionTest/session1.php
http://localhost//SessionTest/sessionHttp.php
這倆 不同檔案在同一個瀏覽器中
PHPSESSID=urskaqg254e51riu9tmv7f66g1 是一模一樣的
http://localhost//SessionTest/session1.php
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Date:Tue, 18 Jul 2017 03:21:45 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=100
Pragma:no-cache
Server:Apache/2.4.10 (Win32) OpenSSL/0.9.8zb mod_fcgid/2.3.9
Set-Cookie:PHPSESSID=urskaqg254e51riu9tmv7f66g1; path=/
Transfer-Encoding:chunked
X-Powered-By:PHP/5.4.33
http://localhost//SessionTest/sessionHttp.php
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Cookie:PHPSESSID=urskaqg254e51riu9tmv7f66g1
Host:localhost
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
所以基於此 不同檔案相同內容 相同瀏覽器程序生成的session_id是一樣的。這就好解釋為什麼瀏覽器能精準找到這個session檔案是因為啥了。。id號相同啊。