关于PHP编程中session的问题集锦及解决方法
PHP的【de】session功能,一直为【yī zhí wéi】许多的【xǔ duō de】初学者🈺为难【wéi nán】。就连有些老手🐝,有时都被搞得莫名其【mò míng qí】妙。本文📂,将这些问题【wèn tí】,做一个🚥简单的【de】🍗汇总,以便大🈲家查阅。
1、错误提示:
Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent |
分析及解决办法
这一类问题【wèn tí】🤵,的原因是你在程序中⛷使用session_start()时,之前已🎟经有实际的【jì de】html内容输【nèi róng shū】出👠了。或【huò】📂许你说【xǔ nǐ shuō】,我没有【wǒ méi yǒu】啊,我只不【wǒ zhī bú】🐠过是echo或【huò】📂print一条消【yī tiáo xiāo】息了🙆。很抱歉【hěn bào qiàn】🥇,你的echo或【huò】📂print语句所【yǔ jù suǒ】产生的输出👠,就是实【jiù shì shí】际的【jì de】html内容输【nèi róng shū】出👠。解决此【jiě jué cǐ】类问题【wèn tí】🤵的办法是,将你的👌session_start()调到程🥣序的第一行。
2、错误提示
Warning: open(F:/689\php\sessiondata\sess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed |
分析及解决方法:
出现这样的错【yàng de cuò】误语句一般是因为【wéi】你🔥的php.ini中关于🛴session.save_path一项没【yī xiàng méi】有设置好,解决的方法是【fāng fǎ shì】将😥session.save_path和【hé】🔘session.cookie_path 设置置为【wéi】🤼
session_save_path = c:\temp session.cookie_path = \ |
然后在【rán hòu zài】c:\目录下🔕建立一个temp目录即可【kě】🔒。
3、错误提示
Warning: Trying to destroy uninitialized session in |
分析及【fèn xī jí】⏱解决方🐶法出类这样的【zhè yàng de】提示【tí shì】,一般情✌况都是🕥你直接【nǐ zhí jiē】🔘调session_destroy()函数造【hán shù zào】成的🥧。很多的【hěn duō de】朋友认为🏺session_destroy()函数可以独立的运行,其实不然👶。解决的【jiě jué de】方法是在你调session_destroy()函数之前【qián】,要用session_start()开启【kāi qǐ】session的功能🍌。
4、问题:怎么获得当前😠session的【de】⌚id值呢【zhí ne】?
最简单的方法是:
echo SID; |
5、问题:
我的程序🌺,在【zài】😍调用【diào yòng】header函数之前没有🐔任何的输出,虽然我include了【le】一个config.php文件🔊,但在【zài】➿config.php文件中👉也没有任何的输出,为什么【wéi shí me】session还是会【hái shì huì】😖报出与【bào chū yǔ】问题【wèn tí】1同样的【tóng yàng de】错误呢🛺,是不是【shì bú shì】因为我在【zài】😍header之前用🏑了【le】session_start()的缘故呢🛺?
答【dá】💺:或许你【huò xǔ nǐ】确实认💂真的检查了你【chá le nǐ】🚛的php程序,在引用【zài yǐn yòng】👑header()之前确【zhī qián què】实也没🔺有任何的输出,并且在【zài】💶你的include文件中也没有任何的输出!但是你是否用光标键在【zài】💶?>这个【zhè gè】PHP代码结束语句后移动🛍检查呢💃?那么你会发现在【zài】💶?>这个【zhè gè】后面,有一个空【kōng】行🙍或几个空【kōng】🥝格【gé】,你删除【nǐ shān chú】🔸了这几【le zhè jǐ】个空【kōng】🥝行或空【háng huò kōng】格【gé】,那么问👍题就解【tí jiù jiě】🗃决了【jué le】。
注🛺:此问题🎙,会出【huì chū】🏊PHP4.1.2中【zhōng】,更高版本,没有测试过【shì guò】。
6、问🌒:用【yòng】🦕session做登录主页面【zhǔ yè miàn】后🍦,其它页【qí tā yè】面怎么用【yòng】🦕session限制登录?
答:最简单的方法是
session_start(); if(!session_registered('login') ││ $login != true) { echo "你没有【nǐ méi yǒu】🚉登陆"; exit; } |
7、问:我用【wǒ yòng】🐌session_register()注册了🔕session变量【biàn liàng】,可是当【kě shì dāng】🛷我用【wǒ yòng】🐌header或用【huò yòng】🥘javascript的重定🉑向语句,那么在【nà me zài】一下页【yī xià yè】面中🔋,我却访问不到session所注册的变量【biàn liàng】值。请问如何解决?
问题的程序片段:
<? session_start(); $ok = 'love you'; session_register('ok'); header("location : next.php"); ?> |
next.php
<? session_start(); echo $ok; ?> |
解决的方法:
当你用⚡header函数或【hán shù huò】window.location这样的【zhè yàng de】功能后【gōng néng hòu】🕑,你上一⚪个页面🏹所注册的session变量,就会容易的丢失,关于这【guān yú zhè】🤖个问题的原因,至今仍【zhì jīn réng】🗾没有一个详细的回答【de huí dá】。
不过有解决的方法。如下所示
header("Location: next.php" ."?" . SID); |
在跳转到下一页面【miàn】的💵时候,将【jiāng】session的当前🚥id做为一🏳个参数,传到后【chuán dào hòu】🕕一个页【yī gè yè】面【miàn】。
8、session如何传数组
session_register('data'); $data=array(1,2,3,4); |
方法是先注册后赋值
9、我是不🚁是可以【shì kě yǐ】🐘用像$HTTP_GET_VARS['**']方式来访问【fǎng wèn】session值呢?
回答:可以【kě yǐ】,你可以【kě yǐ】使用如【shǐ yòng rú】😖下【xià】global数组来㊗访问session,以加强🐐网页的安全性
$HTTP_SESSION_VARS $_SESSION |
例程: