session_status有一种可能的状态,名为PHP_SESSION_DISABLED。
是否有任何特定的功能可以禁用php中的会话?
答案 0 :(得分:3)
备注:我通过添加更多信息并删除我发现错误的先前句子,多次更新此答案。在最后一次编辑中,我完全重新编写了它,删除了错误的句子和对PHP源代码的引用。
Sessions
扩展程序的documentation显示为:
默认情况下,在PHP中启用会话支持。如果您不想使用会话支持构建PHP,则应指定 - disable-session 选项进行配置。
在使用session_status()
编译的PHP上调用--disable-session
或任何其他session function会触发因为该函数不存在而停止脚本的PHP致命错误:
$ php -m | grep session
$ php -r 'session_start();'
PHP Fatal error: Call to undefined function session_start() in Command line code on line 1
文档还说:
Windows版本的PHP内置支持此扩展。您无需加载任何其他扩展即可使用这些功能。
这可能意味着无法从Windows上的PHP中删除会话功能。
您可以通过在php.ini
中为session.save_handler
或session.serialize_handler
设置空值或无效值来停用会话功能。
为了进行测试,您可以使用-d
option在命令行中设置session.save_handler
;它会覆盖从php.ini
:
$ php -d session.save_handler=foo -r 'session_start(); var_dump(session_status() == PHP_SESSION_DISABLED);'
PHP Warning: session_start(): Cannot find save handler 'foo' - session startup failed in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
PHP 2. session_start() Command line code:1
bool(true)
正如您所看到的,session_start()
触发警告,抱怨处理程序无效且会话状态为disabled
(无法启动)。
如果您尝试在运行时将无效值设置为session.save_handler
,ini_set()
会触发警告并且不会更改该值。
$ php -r 'ini_set("session.save_handler", "foo"); session_start(); var_dump(session_status() == PHP_SESSION_ACTIVE);'
PHP Warning: ini_set(): Cannot find save handler 'foo' in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
PHP 2. ini_set() Command line code:1
bool(true)
会话为active
。它成功了。
但是,即使在php.ini
或命令行中将处理程序设置为无效,PHP代码也可以在调用session_start()
之前修复它:
$ php -d session.save_handler=foo -r 'ini_set("session.save_handler", "files"); session_start(); var_dump(session_status() == PHP_SESSION_ACTIVE);'
bool(true)
同样,session_start()
成功,会话为active
。
您可以通过在php.ini
中为session.save_handler
或session.serialize_handler
设置空值或无效值来停用会话功能。
请注意,如果这些值中的任何一个无效,session_start()
会触发PHP Warning
。
但是,因为这些设置都可以在任何地方进行修改(PHP_INI_ALL
表示php.ini
,httpd.conf
,.htaccess
,PHP代码),所以它们也可以从PHP代码中重新设置有效值,取消这种方式禁用会话。
显然除了在没有会话支持的情况下编译PHP之外,没有办法强制禁用会话,如上所述。
答案 1 :(得分:1)
在咨询PHP源代码后,ext/session/tests/session_status_disabled.phpt
处有以下文件:
--TEST--
Test session_status() function : disabled
--SKIPIF--
<?php include('skipif.inc'); ?>
--INI--
session.save_handler=non-existent
--FILE--
<?php
echo "*** Testing session_status() : disabled\n";
var_dump(session_status() == PHP_SESSION_DISABLED);
?>
--EXPECTF--
*** Testing session_status() : disabled
bool(true)
因此,当会话没有save_handler时,session_status()
将返回PHP_SESSION_DISABLED
。
<强>结论:强>
通过执行以下操作禁用会话:
在php.ini文件中修改此行:
session.save_handler=non-existent
如果您正在运行Web服务器,它可能有自己的配置文件覆盖ini文件。对我来说,在Apache中,我必须在/etc/httpd/conf.d/php.conf
中注释掉以下几行:
#php_value session.save_handler "files"
#php_value session.save_path "/var/lib/php/session"
或者替代地设置值。