有兩個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告訴給服務器來解決問題。
