使用Zend_Session组件,有4种开启会话的方法,其中2种是错误的。
错误的:不要开启PHP的session.auto_startsetting。如果你使用mode_php(或等同)并在php.ini中已经开启了该选项,而你又没有权限去关闭该选项,你可以在.htaccess文件(这个文件通常在HTML文档根目录下)中增加下面这一句:
php_value session.auto_start 0
错误的:不要直接使用PHP的session_start()函数。如果你直接使用session_start(),之后再使用Zend_Session_Namespace,那么Zend_Session::start()会抛出("会话已经开始")的异常。如果你在使用Zend_Session_Namespace或使用Zend_Session::start()后调用session_start(),那么会产生一个E_NOTICE级别的错误,且该调用将会被忽略。
正确的:使用Zend_Session::start()开启会话。如果你想让每个页面请求都开启会话,那么应该在ZF应用程序的引导文件(index.php)中尽早的调用这个函数。开启会话有些额外的开销,如果只有部分页面请求需要开启会话,那么就:
在引导文件中,使用Zend_Session::setOptions()无条件地设置strict选项为true。
在任何Zend_Session_Namespace()对象初始化之前对需要使用会话的请求只调用Zend_Session::start()。
象往常一样,在需要会话的地方,使用"new Zend_Session_Namespace()",但必须确认先前已经调用过Zend_Session::start()了。
strict 选项防止 new Zend_Session_Namespace() 自动调用 Zend_Session::start()。 这样,这个选项有利于应用程序的开发者强制执行一个设计原则以避免在某些页面请求中使用会话, 因为在调用 Zend_Session::start() 之前,实例化 Zend_Session_Namespace 时,会抛出一个异常。开发者需小心地考虑使用 Zend_Session::setOptions() 所引起的冲突,由于它们对应于基本的ext/session这些具有全局作用选项。
正确的:只要有需要使用会话的地方,就初始化new Zend_Session_Namespace(),并且基本的PHP会话将自动开启。这个极端简单的用法能在大多数的情形下很好地工作。然而,如果你使用地是默认的基于cookie的会话(强烈推荐使用这种方式),你必须确保在第一次调用new Zend_Session_Namespace()在任何PHP发向向客户端输出(例如,HTTP headers)之前。参见 第 35.4.2 节 “错误:Headers Already Sent” 有更多的信息。
FlashMessenger:
http://www.kamiladryjanek.com/2009/01/zend-framework-smarty-flashmessenger-helper/
分享到:
相关推荐
但是,在实际开发过程中,session_start()可能会因为多种原因导致错误。本文将分析常见的session_start()错误原因,并提供相应的解决方法。 1. 输出缓冲区未开启导致错误: 在PHP脚本中,如果在调用session_start()...
在进行Web开发时,尤其是在使用PHP语言处理用户会话(session)的过程中,可能会遇到一个常见的错误提示:“Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent ...
Fatal error: session_start() [function.session-start]: Failed to initialize storage module: files (path: ) in C:\usr\phpMyAdmin\libraries\session.inc.php on line 75 I.更改服务器配置: 1、检查error.log...
做开发的时候,操作session有时候会遇到这个问题:Warning: session_start() [function.session-start]…… 系统环境:WIN2003+IIS6+PHP5.2.12 PHP出现类似如下错误: Warning: session_start()[function.session-...
本篇文章将详细探讨如何使用`session_start()`来查看和管理用户的浏览记录。 首先,了解`session_start()`的工作原理。当在PHP脚本中调用`session_start()`时,它会在服务器上创建或恢复一个唯一的会话ID,并将此ID...
在Oracle数据库管理与优化的过程中,`v$session`与`v$session_wait`视图扮演着至关重要的角色,它们提供了关于当前活动会话及其等待事件的详细信息,这对于诊断性能问题、理解数据库行为以及进行有效的资源管理至关...
当调用 `session_destroy()` 时,如果没有先调用 `session_start()` 来启动会话,就会出现此警告。确保在销毁session之前,先通过 `session_start()` 开启session功能。 4. **获取当前session ID** 要获取当前...
'SESSION_AUTO_START' => true, // 是否自动开启Session 'SESSION_TYPE' => 'Redis', //session类型 'SESSION_PERSISTENT' => 1, //是否长连接(对于php来说0和1都一样) 'SESSION_CACHE_TIME' => 3, //连接超时...
说是已经有输出,用编辑器打,前面明明什么都没有,原来在使用AJAX的 时候,也出现过这种情况,后来,把这个PHP文件放到linux中打开,会发现,在文件的最前面,会出现“锘 ”这样的一个字符(引号内),把它去掉以后...
php_session_decoder, 在Go中,编写了PHP会话编码器/解码器 php_session_decoderPHP会话编解码器/解码器 安装安装:安装推荐的方法是使用 gonuts.io:nut获取 yvasiyarov/php_session_decoder详细信息,请转到 http:/
需要注意的是,`session_id()` 必须在调用 `session_start()` 函数之前调用,以便正确地设置会话ID。 在会话处理中,会话ID是区分不同用户的关键,通常存储在客户端的Cookie中或通过URL传递。如果用户禁用了Cookie...
### Oracle V$SESSION 和 V$SESSION_WAIT 的详细解析 #### 概述 Oracle 数据库提供了大量的动态性能视图(Dynamic Performance Views),其中 `V$SESSION` 和 `V$SESSION_WAIT` 是两个非常重要的视图,它们能够帮助...
如果你在调用`session_destroy()`之前没有执行过`session_start()`,则会因为没有可用的session而引发错误。 在处理session时,还有几点需要注意: 1. **session生命周期**:session数据默认会被存储在服务器的临时...
Oracle 参数 open_cursors 与 session_cached_cursors 详解 Oracle 数据库中,open_cursors 和 session_cached_cursors 是两个重要的参数,它们对 Oracle 的运行性能产生了直接的影响。本文将详细解释这两个参数的...