PHP Conference Japan 2024

session_save_path

(PHP 4, PHP 5, PHP 7, PHP 8)

session_save_path取得及/或設定目前的 Session 儲存路徑

說明

session_save_path(?string $path = null): string|false

session_save_path() 會回傳目前用來儲存工作階段資料的目錄路徑。

參數

path

工作階段資料路徑。如果指定且非 null,則資料儲存的路徑將會被更改。為了達到此目的,session_save_path() 必須在 session_start() 之前呼叫。

注意事項:

在某些作業系統上,您可能需要指定一個檔案系統上的路徑,該檔案系統可以有效率地處理大量的小檔案。

回傳值

回傳目前用於資料儲存的目錄路徑,失敗時則回傳 false

更新日誌

版本 說明
8.0.0 path 現在可以為 null。

另請參閱

新增筆記

使用者貢獻的筆記 5 則筆記

58
mdibbets at outlook dot nospam
11 年前
我在 public html 資料夾旁邊建立了一個資料夾,並將這些程式碼放在 index.php 的最一開始。

工作階段資料夾的位置

/domains/account/session

index.php 的位置

/domains/account/public_html/index.php

我在 index.php 的第 0 行放的程式碼

<?php
ini_set
('session.save_path',realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));
session_start();

這是唯一對我有用的解決方案。希望這能幫助到其他人。
36
alvaro at demogracia dot com
14 年前
Debian 並未使用預設的垃圾回收器來處理工作階段。相反地,它將 session.gc_probability 設為零,並執行 cron 作業來清除預設目錄中的舊工作階段資料。

因此,如果您的網站使用 session_save_path() 設定了自訂位置,您也需要設定 session.gc_probability 的值,例如:

<?php
session_save_path
('/home/example.com/sessions');
ini_set('session.gc_probability', 1);
?>

否則,'/home/example.com/sessions' 中的舊檔案將永遠不會被刪除!
15
sampathperera at hotmail dot com - 斯里蘭卡
16 年前
叢集式網頁伺服器上的 Session!

我們在具有 2 個網頁伺服器叢集的 PHP Session 處理中遇到問題。問題是一台伺服器的 Session 資料在另一台伺服器上無法使用。

因此,我在兩台伺服器的 php.ini 檔案中進行了一個簡單的配置。將 session.save_path 的預設值更改為兩台伺服器上的共享資料夾 (/mnt/session/)。

對我來說有效 :)
7
ohcc at 163 dot com
6 年前
如果 session.save_handler 設定為 files,在具有最大路徑長度限制的系統上,當 Session 資料檔案的路徑過長時,即使儲存 Session 的資料夾實際上存在於磁碟上,PHP 也可能會出現「找不到檔案或目錄」之類的錯誤,並且無法啟動 Session。

您應該

1. 保持儲存 Session 的資料夾的絕對路徑不要太長
2. 如果您使用的是 PHP 7.1+,請勿將 session.sid_length 設定為過大的數字,例如 255

我曾經在 Windows 上遇到這個問題,並浪費了數小時來解決它。
1
Ale
7 個月前
這個函式似乎只是從 php.ini 的 [Session] 區段返回 session.save_path 的值。這有一個重要的含義:返回的值也可能看起來像 "0;0660;/var/lib/php/sessions",這當然不是有效路徑。

一種提取路徑的方法,即使可能存在分號,也可以像這樣

$ssp = explode(';', session_save_path());
echo end($ssp);

由於 end 透過引用獲取陣列,因此如果不依賴中間變數,則無法真正實現單行程式碼。
To Top