實例直觀解釋sessionid的作用


有兩個php頁面,demo1.php與demo2.php。如果想要在demo1.php創建一個session需要在的demo2.php或者說其它頁面都可以獲取到設置的session的值,達到會話的功能,有幾種實現方式?

一、未屏蔽瀏覽器cookie

demo1.php代碼:

<?php
session_start();
$sid = session_id();
echo "sessionid:".$sid."<br/>";
$_SESSION['user'] = '巴八靈';
$a = $_SESSION['user'];
echo "session的值:".$a.PHP_EOL."<br/>";

結果如下:

demo2.php

<?php
session_start();
$sid = session_id();
echo "sessionid:".$sid."<br/>";
echo "session的值:".$_SESSION['user'];

結果如下:

查看php.ini配置我們這里設置session存儲是在服務器/tmp目錄下

通過查看發現session的存儲都是以sessionid加上一串字符構成的文件,我們設置的session的值就存儲在這樣的文件當中。我們發現設置的session之所以能夠在兩個頁面中共享獲取,是因為都共同擁有一個sessionid,並且這個sessionid以cookie形式存儲在瀏覽器,然后通過http請求中的header頭的cookie項傳遞給服務器。那如果將瀏覽器cookie禁用后將會發生什么效果呢?下面的部分就將闡述瀏覽器禁用cookie后的影響和解決方法的實現。

二、屏蔽瀏覽器cookie后

我這邊使用的是google瀏覽器,進入google瀏覽器設置選項-內容設置-cookie-屏蔽cookie選項,如下圖:

發現程序報錯,sessionid每次刷新都會不一樣,但是session的設置不會受影響,值還是還是可以存儲到服務器中,但是與其它頁面session不共享。

方法一:通過url顯現傳遞sessionid實現session共享

demo1.php

<?php
session_start();
$sid = session_id();
echo "sessionid:".$sid."<br/>";
$_SESSION['user'] = '巴八靈';
$a = $_SESSION['user'];
echo "session的值:".$a."<br/>"; 
echo "<a href='./demo2.php?sid=".$sid."' target='_blank' >demo2.php</a>";

demo2.php


<?php
$sid = $_GET['sid'];
session_id($sid);
session_start();
$sid = session_id();
echo "sessionid:".$sid."<br/>";
echo "session的值:".$_SESSION['user'];

方法二:修改php.ini配置隱式通過get參數sessionid
session.use_trans_sid = 1
session.use_cookies = 1
session.use_only_cookies = 0

修改參數數重啟php-fpm

demo1.php


<?php
session_start();
$sid = session_id();
echo "sessionid:".$sid."<br/>";
$_SESSION['user'] = '巴八靈';
$a = $_SESSION['user'];
echo "session的值:".$a."<br/>"; 
echo "<a href='./demo2.php‘ target='_blank' >demo2.php</a>";

demo2.php

<?php
session_start();
$sid = session_id();
echo "sessionid:".$sid."<br/>";
echo "session的值:".$_SESSION['user'];

仔細可以發現屏蔽瀏覽器cookie后,瀏覽器中header頭沒有傳遞cookie項,這個時候sessionid不能夠都過header頭的方式傳遞,服務器肯定不知道sessionid的是什么,於是可以通過url中傳遞sessionid來讓服務器知道這個是什么,從而去取session的設置信息。換言之就是sessionid是獲取session配置信息的一個橋梁,cookie在其中起到的是傳遞sessionid的作用,我們屏蔽cookie后,讓session可以共享的解決方法也是將sessionid告訴給服務器來解決問題。

由此我們可以得出實現sessionid會話的三種方式為:

1.瀏覽器cookie沒有屏蔽,通過php生成session時,php會自動的將此刻的sessionid在http的header上以cookie項傳遞給服務器進行校驗后並獲取session的設置值

2.屏蔽瀏覽器cookie后,php設置session時產生的sessionid可以通過get方式將這個參數傳遞給需要訪問的其它頁面,在新的頁面中接收sessionid的值,並通過session_id($_GET['sid'])這個方法講sesionid給出去從而獲取設置的session值

3.通過配置php.ini中session.use_trans_sid = 1來實現隱式傳遞sessionid,設置session的頁面跳轉也不需要帶上參數,系統會默認帶上,跳轉后的頁面也不需要接收參數,都是在內部解決的,從而也可以獲取到設置的session的值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM