当您运行一个应用程序时,您会打开它,做些更改,然后关闭它,这很像一次会话,计算机清楚你是谁,它知道你何时启动应用程序,并在何时终止,但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态.
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等),不过,会话信息是临时的,在用户离开网站后将被删除,如果您需要永久储存信息,可以把数据存储在数据库中.
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导.
开始 PHP Session
在您把用户信息存储到 PHP session 中之前,首先必须启动会话,session_start() 函数必须位于 <html> 标签之前:
- <?php session_start(); ?>
- <html>
- <body>
- </body>
- </html>
上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID.
存储 Session 变量
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:
- <?php
- session_start();
-
- $_SESSION['views']=1;
- ?>
- <html>
- <body>
- <?php
-
- echo "Pageviews=". $_SESSION['views'];
- ?>
- </body>
- </html>
-
在下面的例子中,我们创建了一个简单的 page-view 计数器,isset() 函数检测是否已设置 "views" 变量,如果已设置 "views" 变量,我们累加计数器,如果 "views" 不存在,则我们创建 "views" 变量,并把它设置为 1:
- session_start();
- if(isset($_SESSION['views']))
- $_SESSION['views']=$_SESSION['views']+1;
- else
- $_SESSION['views']=1;
- echo "Views=". $_SESSION['views'];
php session_start()关于Cannot send session cache limiter - headers
解决办法:修改php.ini中的session.auto_start = 0 为 session.auto_start = 1 ,output_buffering =改为on或者任何数字,然后别忘记重新启动...
错误提示:
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent
分析及解决办法:
这一类问题的原因是你在程序中使用PHP session_start()时,之前已经有实际的html内容输出了,或许你说,我没有啊,我只不过是echo或print一条消息了,很抱歉,你的echo或print语句所产生的输出,就是实际的html内容输出,解决此类问题的办法是,将你的session_start()调到程序的第一行.
Warning: Trying to destroy uninitialized session in
分析及解决方法
出类这样的提示,一般情况都是你直接调session_destroy()函数造成的,很多的朋友认为session_destroy()函数可以独立的运行,其实不然,解决的方法是在你调session_destroy()函数之前,要用PHP session_start()开启session的功能. |