91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決php中session不起作用的問題

發布時間:2020-09-29 15:39:02 來源:億速云 閱讀:309 作者:小新 欄目:編程語言

這篇文章主要介紹如何解決php中session不起作用的問題,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

php session不起作用的解決辦法:首先打開php的配置文件;然后找到session相關的配置項;接著新建session 文件,并設置權限;最后重新上傳文件即可。

解決 php 項目中 session 失效的方法

今天下班坐班車,快到站的時候,上家公司的 leader 發了個 qq 給我,意思是救火,下車后回來在電腦上詳細問了下,leader 的描述如下

這個地址  你幫我看下 為啥上傳完試卷發布任務  設置答題卡的時候  session 就沒了

因為這個項目一開始后臺都是我一人開發的,因此很快就找到了問題所在。流程為:用戶通過 js 組件上傳試卷,在上傳試卷的方法中通過 session 存儲剛剛上傳的試卷詳細信息,如名稱、后綴、存入資源表的 ID 等,上傳成功后,再點擊頁面上的其他選項,如學校、年級、難易度等,最后點擊提交,在提交處理的方法里,一開始便判斷剛剛上傳的 session 值是否存在,不存在便跳到試卷首頁。我在此方法中打印了 $_SESSION,沒有值,奇怪了,以前還是好好的。于是我問了下,啥時候開始的,leader 說下午快下班時,老師打電話說上傳試卷設置答題卡不成功,老跳轉。接著又問了下,動服務器環境了么,leader 說沒有。

既然出現了問題,那就解決問題唄。正好這段時間在看《PHP 核心技術與最佳實踐》一書,里面就對 session 和 cookie 有詳細的描述,同時也加深了我對二者的理解。于是我先打開 php 的配置文件,找到 session 相關的配置項,發現 session.save_path為 /data2/session,我記得以前都是設置為 /data1/session 的,怎么變了。于是我退出來去看看此路徑,一開始我以為是該目錄權限不夠,后來一看,壓根就沒有該目錄,難怪每個 session 不會跨頁面。于是新建文件,設置權限,再上傳,一切又恢復正常了。

寫到這,我也想再嘮叨下 session 相關的技術點。session 是存儲在服務器端的,默認是以文件方式存儲的(session.save_handler = files)。那 session 是如何產生的呢?session 是通過 session_start() 函數產生的 ,當此函數運行時,在 session 存儲的目錄里生成一個文件和唯一一個與之對應的 session id,通過 session id 可以取出該 session 文件的數據。由于每次運行 session_start() 都會產生新的 seession 文件,那么如何利用到以前生成 session 文件呢,只需 session_id($session_id),那么便不會新產生 session 文件了,而會去讀 session id 對應的 session 文件。session id 在默認情況下都是使用在客戶端(瀏覽器)的 cookie 來保存 session id(在 chrome 瀏覽器上按 F12 鍵,點擊 Resources-cookies,可以看到),使用 $_COOKIE['PHPSESSID'] 可以獲取。那個PHPSESSID是session id 的默認名稱,在 php.ini 里可以通過 session.name 來設置,在腳本中用 session_name() 來獲取 session id 的名稱。每次瀏覽器和服務器對話時,瀏覽器都會把 session id 傳給服務器的,服務器會依據傳遞過來的 session id 找到相應的 session 文件獲取相應信息進行相關操作。而一旦客戶端(瀏覽器)禁用了 cookie,那么服務器端變不會接收到 session id,此時需要顯示傳遞 session id 了。兩種方法:手動通過 URL 傳遞 session id;隱藏表單傳遞 session id。上述兩種方法需要服務端的 php 環境中session.use_trans_sid 值為 1。

啰嗦了那么多,最后還是 linus 那句話,“talk is cheap,show me the code”。

<?php
session_start();
$_SESSION['arr'] = array('name' => 'molaifeng', 'hobby' => 'php');
?>
<a href="testSession.php?<?php echo session_name(); ?>=<?php echo session_id()?>">testSession</a>
<?php
 
session_start($_REQUEST[session_name()]);
print_r($_SESSION);

代碼都看懂的吧,就不解釋了。

最后總結下吧,一般情況下出現跨頁面 session 失效,基本上是上述列出的幾點。1、session.save_path 有誤,如權限不夠,或是目錄不存在;2、服務器php配置中的 session.use_trans_sid 值為 0;3、客戶端禁用了cookie。不過我覺得第一種情況出現的頻率應該挺高的。

【updated 2018-05-21】

周五晚上上線,又踩了個坑。框架是用 CI , session 寫入 MySQL 表。一開始表現形式和上面描述的癥狀一模一樣,于是便重新設置了 seesion 的目錄,并賦予了相關的讀寫權限,然并卵。后來發現該表是個 memory 表,以為是超出了內存表最大值,于是清空了該表,還是然并卵。最后對比了下兩個版本的差異,發現在保存 session 的時候新增了兩個字段,于是采用排除法,先把兩個都注釋了,然后一個一個打開,最后定位到了問題。原來,新增的一個值是用來保存一個類型表的所有值的,一開始在做測試時,只有幾個值,后來上線時新增了一百多個值,同時那個字段只有 3000 大小,應該是撐爆了。于是先把該字段調大,讓線上驗證,然后改了下相關邏輯,不把表的所有值都寫進去。

以上是如何解決php中session不起作用的問題的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沿河| 安阳市| 甘洛县| 潞城市| 孟连| 屏南县| 博兴县| 兰坪| 望城县| 怀安县| 津市市| 南涧| 辽宁省| 道孚县| 洛浦县| 江都市| 察雅县| 台东县| 阜新市| 七台河市| 乐业县| 长宁县| 德阳市| 平乐县| 封丘县| 安仁县| 桦川县| 宁波市| 军事| 云阳县| 普宁市| 奉贤区| 桦南县| 达日县| 微山县| 二手房| 通山县| 当涂县| 左贡县| 饶河县| 茶陵县|