在运行时设置php.ini的会话

时间:2014-08-21 13:16:00

标签: php session ini

函数set_cookie_params允许在运行时配置负责cookie会话的指令。在php.net中,它表示需要在session_start()之前的每个请求中调用此函数。是否有可能我们需要在创建新会话的session_start之前调用它(在响应中我们将创建一个cookie)而不是在我们继续现有会话的脚本中调用它,这是因为这些指令配置创建cookie会话,如果我们不在下一个脚本中创建cookie,那么配置它就没用了。 另外,我们是否必须调用ini_set()来配置会话指令,在每个脚本中或仅在启动新会话的脚本中(如指令session.gc_maxlifetime)

2 个答案:

答案 0 :(得分:1)

session_start如果没有适用于当前设置配置的会话,则还原会话启动新会话。换句话说,当您致电session_start时,您不知道是否已有会话,会话开始会根据当前的ini设置和/或session_set_cookie_params设置设置Cookie 。此外,session_name会影响在设置Cookie 中使用的名称和在调用session_start时在Cookie中查找的名称。

因此,在致电session_start之前,您始终需要每次都配置一切。

答案 1 :(得分:1)

如果您的逻辑之前不允许设置应用程序并调用选项,则可以设置新的会话启动功能。但正确的方法是引导您的应用程序和(可能包括)配置文件,设置所有选项。像

<强> bootstrap.php中

<?php
//bootstrap file    
session_set_cookie_params(...);
session_start();

<强>的index.php

<?php
require_once('bootstrap.php');
//DoStuff

诅咒你可以覆盖php函数,但这不是实现任务的方法

rename_function('session_start', 'new_session_start');
override_function('session_start', '', 'return override_session_start();');

function override_session_start(){
   // set settings
   session_set_cookie_params(...);
   new_session_start();
}

session_start();