PHP Conference Japan 2024

session_save_path

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

session_save_path获取和/或设置当前会话保存路径

描述

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 - Sri Lanka
16 年前
群集 Web 服务器上的会话!

我们在使用 2 台 Web 服务器群集时遇到了 PHP 会话处理问题。问题是一台服务器的会话数据在另一台服务器上不可用。

因此,我在两台服务器的 php.ini 文件中进行了一个简单的配置。将 session.save_path 的默认值更改为两台服务器上的共享文件夹 (/mnt/session/)。

它对我有用。 :)
7
ohcc at 163 dot com
6 年前
如果 session.save_handler 设置为 files,在具有最大路径长度限制的系统上,当会话数据文件的路径过长时,php 可能会出现类似“No such file or directory”的错误并无法启动会话,即使会话保存文件夹确实存在于磁盘上。

您应该

1. 保持会话保存文件夹的绝对路径不要太长
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