仓酷云

标题: PHP网站制作之PHP关于session的成绩集锦处理计划 [打印本页]

作者: 山那边是海    时间: 2015-2-16 00:24
标题: PHP网站制作之PHP关于session的成绩集锦处理计划
php   manual(PHP手册)肯定是要从网上下载一个的,它很权威,也很全面,我自己认为它是一本很好的参考书,但是不适合新手当教材使用。session|处理|成绩     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:/689\php\sessiondata\sess_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所注册的变量值。请问若何处理?
   成绩的法式片断:
       session_start();
   $ok = \'love you\';
   session_register(\'ok\');
   header(\"location : next.php\");
   ?>
     
   next.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
   例程:
       session_start();
   $username = \'stangly.wrong\';
   session_register(\'username\');
     
   echo $HTTP_SESSION_VARS[\'username\'];
   echo \'
   \';
   echo $_SESSION[\'username\'];
   ?>
   请参照此例程修正合适您本人的法式。
     
   成绩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()]);
   }
     
     
   以上,所述是一些老手常常碰到的成绩。也许是胪陈不清,不免有误地点,请高手指导品评。看到好的帖子最好up一下,以使得更多的人得到分享。
作者: 再现理想    时间: 2015-2-16 01:13
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者: 精灵巫婆    时间: 2015-2-24 05:14
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 小女巫    时间: 2015-2-27 19:43
当然这种网站的会员费就几十块钱。
作者: 再见西城    时间: 2015-3-9 11:18
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者: 灵魂腐蚀    时间: 2015-3-12 23:31
本文当是我的笔记啦,遇到的问题随时填充
作者: 若天明    时间: 2015-3-17 08:52
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 飘灵儿    时间: 2015-3-24 03:44
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
作者: 冷月葬花魂    时间: 2015-3-27 06:52
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: 蒙在股里    时间: 2015-3-28 16:28
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
作者: 分手快乐    时间: 2015-4-14 08:17
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
作者: 老尸    时间: 2015-4-17 04:38
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 金色的骷髅    时间: 2015-4-21 05:58
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
作者: 小妖女    时间: 2015-4-27 03:26
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 海妖    时间: 2015-5-9 05:37
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 莫相离    时间: 2015-6-11 02:58
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 谁可相欹    时间: 2015-6-16 23:33
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
作者: 仓酷云    时间: 2015-6-22 05:38
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
作者: 透明    时间: 2015-6-22 23:06
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 兰色精灵    时间: 2015-7-6 21:25
兴趣是最好的老师,百度是最好的词典。
作者: 飘飘悠悠    时间: 2015-7-10 11:35
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2