php session不起作用怎麼辦
php session不起作用的解決方案:先開啟php的設定檔;然後找到session相關的設定項;接著新建session 文件,並設定權限;最後重新上傳檔案即可。
推薦:《PHP影片教學》
解決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不起作用怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
