PHP编程----PHP session常见问题集锦

 
1.
   
错误提示
   Warning: Cannot send session cookie - headers already sent
   Warning: Cannot send session cache limiter - headers already sent
   
分析及解决办法
   
这一类问题,的原因是你在程序中使用 session_start() 时,之前已经有实际的 html 内容输出了。或许你说,我没有啊,我只不过是 echo print 一条消息了。很抱歉,你的 echo print 语句所产生的输出,就是实际的 html 内容输出。解决此类问题的办法是,将你的 session_start() 调到程序的第一行。
     
   2.
   
错误提示
   Warning: open(F:/689phpsessiondatasess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed
   
分析及解决方法
   
出现这样的错误语句一般是因为你的 php.ini 中关于 session.save_path 一项没有设置好,解决的方法是将 session.save_path session.cookie_path 设置置为
   session_save_path = c:temp
   session.cookie_path = c:temp
   
然后在 c: 目录下建立一个 temp 目录,即可
     
   3.
   
错误提示
   Warning: Trying to destroy uninitialized session in
   
分析及解决方法
   
出类这样的提示,一般情况都是你直接调 session_destroy() 函数造成的。很多的朋友认为 session_destroy() 函数可以独立的运行,其实不然。解决的方法是在你调 session_destroy() 函数之前,要用 session_start() 开启 session 的功能。
     
   4.
问题 : 怎么获得当前 session id 值呢?
   
最简单的方法是 :
   echo SID;
   
你会发现的。
     
   5.
问题 : 我的程序,在调用 header 函数之前没有任何的输出,虽然我 include 了一个 config.php 文件,但在 config.php 文件中也没有任何的输出,为什么 session 还是会报出与问题 1 同样的错误呢,是不是因为我在 header 之前用了 session_start() 的缘故呢 ?
   
: 或许你确实认真的检查了你的 php 程序,在引用 header() 之前确实也没有任何的输出,并且在你的 include 文件中也没有任何的输出!但是你是否用光标键在 ?> 这个 PHP 代码结束语句后移动检查呢?那么你会发现在 ?> 这个后面,有一个空行或几个空格,你删除了这几个空行或空格,那么问题就解决了。
   
注:此问题,会出 PHP4.1.2 中,更高版本,没有测试过。
     
   6.
: session 做登录主页面后,其它页面怎么用 session 限制登录。。。
   
答:最简单的方法是
   session_start();
   if(!session_registered('login')
││ $login != true) {
   echo "
你没有登陆 ";
   exit;
   }
     
   7.
: 我用 session_register() 注册了 session 变量,可是当我用 header 或用 javascript 的重定向语句,那么在一下页面中,我却访问不到 session 所注册的变量值。请问如何解决?
   
问题的程序片段:
   <?php   
   session_start();
   $ok = 'love you';
   session_register('ok');
   header("location : next.php");
   ?>
     
   next.php
   <?php
   session_start();
   echo $ok;
   ?>
     
   
解决的方法:
   
当你用 header 函数或 window.location 这样的功能后,你上一个页面所注册的 session 变量,就会容易的丢失,关于这个问题的原因,至今仍没有一个详细的回答。
   
不过有解决的方法。如下所示
   header("Location: next.php" ."?" . SID);
   
在跳转到下一页面的时候,将 session 的当前 id 做为一个参数,传到后一个页面。
     
   8.session
如何传数组
   session_register('data');
   $data=array(1,2,3,4);
     
   
方法是先注册后赋值
     
   9.
问题 9: 我是不是可以用像 $HTTP_GET_VARS['**'] 方式来访问 session 值呢?
     
   
回答:可以,你可以使用如下 global 数组来访问 session ,以加强网页的安全性
   $HTTP_SESSION_VARS
   $_SESSION
   
例程 :
<? php
   session_start (); 
    $username  'stangly.wrong'
    session_register ( 'username' ); 
     
   echo  $HTTP_SESSION_VARS [ 'username' ]; 
   echo 
   '
   echo  $_SESSION [ 'username' ]; 
   ?> 
php爱好者站http://www.phpfans.net phper 提供一切资讯 .
请参照此例程修改符合您自己的程序。
     
   
问题 10:session_unregister() session_destroy() 有何区别?
   session_unregister()
函数主要作用是注消当前的一个 session 变量。不过要注意的是,如果你用 $HTTP_SESSION_VARS $_SESSION 在当前页面中引用过 session 变量,那么你可能需要和 unset() 配合 来注消 session 变量。
   
session_destroy() 是清除当前的 session 环境。意思就是说,当你用 session_destroy() 函数后,那么你就不可能再用 session_is_registered() 来检测 session 的变量了。但是需要注意的是他不能清除 global 中的 session 或使用了 session cookie 的中的 session. 所以在用 session_destroy 之前,最好不要用 $HTTP_SESSION_VARS $_SESSION 来访问 session.( 译自于 php.net)
     
   
例程:
   if(isset($_COOKIE[session_name()])) {
   session_start();
   session_destroy();
   unset($_COOKIE[session_name()]);
   }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值