分类:
2008-04-14 17:07:45
1.
L:o y\JV `0 错误提示 PHPChina 开源社区门户.q.T0eS6k"Jg ^0s8@
Warning: Cannot send session cookie - headers already sent
4~d)M+~$q4}@A RJ0 Warning: Cannot send session cache limiter - headers already sent PHPChina 开源社区门户,P NH*P,K%?
分析及解决办法
!_Y9OPrL0 这一类问题,的原因是你在程序中使用session_start()时,之前已经有实际的html内容输出了。或许你说,我没有啊,我只不过是echo或print一条消息了。很抱歉,你的echo或print语句所产生的输出,就是实际的html内容输出。解决此类问题的办法是,将你的session_start()调到程序的第一行。 PHPChina 开源社区门户Qm ?)M @,sA[0O;|
PHPChina 开源社区门户GCE:_&H4~VGb/E X
2.
B!@ L D(Q3b6|0 错误提示 PHPChina 开源社区门户 Pi[&p1B'^6g
Warning: open(F:/689\php\sessiondata\sess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed
#l ~A6a8L$K'Q d0 分析及解决方法
}+\7QP b$UNX;r8z^0 出现这样的错误语句一般是因为你的:;?>javascript:;" onClick="tagshow(event, 'php');return false;">php.ini中关于session.save_path一项没有设置好,解决的方法是将session.save_path和session.cookie_path 设置置为
| FaIDn,X0 session_save_path = c:\temp PHPChina 开源社区门户s8n&OWY*| D
session.cookie_path = c:\temp PHPChina 开源社区门户w(eB:zcnR4P
然后在c:\目录下建立一个temp目录,即可 PHPChina 开源社区门户Wc0A7^A i Y
PHPChina 开源社区门户`0y oEL~q
3. PHPChina 开源社区门户 i.[r TG[#h;l;FB
错误提示
#in'f `5qI?0 Warning: Trying to destroy uninitialized session in PHPChina 开源社区门户b?3Eoh|
分析及解决方法 PHPChina 开源社区门户R,L)]-hN
出类这样的提示,一般情况都是你直接调session_destroy()函数造成的。很多的朋友认为session_destroy()函数可以独立的运行,其实不然。解决的方法是在你调session_destroy()函数之前,要用session_start()开启session的功能。
/@CNtjuFDD-B.\-R0 PHPChina 开源社区门户 ?"|Qu5d/v
4.问题:怎么获得当前session的id值呢? PHPChina 开源社区门户0H8AE*f#bN
最简单的方法是: PHPChina 开源社区门户@+Y5S i_
echo SID;
$J(Sqx7P%V8S,A9F?O0 你会发现的。 PHPChina 开源社区门户"B+vm-Y!N WK"Q
2MRV\R(|0 5.问题:我的程序,在调用header函数之前没有任何的输出,虽然我include了一个config.php文件,但在config.php文件中也没有任何的输出,为什么session还是会报出与问题1同样的错误呢,是不是因为我在header之前用了session_start()的缘故呢?
/BZr#T%^j2nj;sR^0 答:或许你确实认真的检查了你的php程序,在引用header()之前确实也没有任何的输出,并且在你的include文件中也没有任何的输出!但是你是否用光标键在?>这个PHP代码结束语句后移动检查呢?那么你会发现在?>这个后面,有一个空行或几个空格,你删除了这几个空行或空格,那么问题就解决了。
c(A~ `:fEzlF2tl&R0 注:此问题,会出PHP4.1.2中,更高版本,没有过。
%V.?J'Jk0 PHPChina 开源社区门户`M{~Qn8}
6.问:用session做登录主页面后,其它页面怎么用session限制登录。。。 PHPChina 开源社区门户3g4w*[%Z*A3`f4z%ZBG S
答:最简单的方法是 PHPChina 开源社区门户.F:p%W+I']j/b y
session_start(); PHPChina 开源社区门户,cq}cR{
if(!session_registered(\'login\') ││ $login != true) { PHPChina 开源社区门户,Vq%z9sb9n T(S_&S
echo \"你没有登陆\";
K4V0R%A1@0 exit;
a9B3wx YQI0 }
+i,fw h0EF9uF0
B#Q m#?5HD0 7.问:我用session_register()注册了session变量,可是当我用header或用javascript的重定向语句,那么在一下页面中,我却访问不到session所注册的变量值。请问如何解决? PHPChina 开源社区门户:Jre9R9Y \"P m
问题的程序片段: PHPChina 开源社区门户C+?@8q;] i8^1s7M
session_start(); PHPChina 开源社区门户#K'\k!?r
$ok = \'love you\';
(rk]-pOd Z{1r}0 session_register(\'ok\'); PHPChina 开源社区门户*Z?l)}&F'`7CJ%E
header(\"location : next.php\");
.p~ m@f+aB)k0 ?>
_7gS"Z"Q0
(DQh @"F"t9m"H3b0 next.php
;r!b'^:]Drk(g%E0 session_start(); PHPChina 开源社区门户6wh/F'S J v5P
echo $ok; PHPChina 开源社区门户-Z kUB)[Nc
?> PHPChina 开源社区门户+m9i9O^ uw
PHPChina 开源社区门户GXi1P0M:t i5{8j4?g
解决的方法: PHPChina 开源社区门户8F])d;r|)o
当你用header函数或window.location这样的功能后,你上一个页面所注册的session变量,就会容易的丢失,关于这个问题的原因,至今仍没有一个详细的回答。
O]-y }mh0 不过有解决的方法。如下所示 PHPChina 开源社区门户? ]Y4ki$yi
header(\"Location: next.php\" .\"?\" . SID); PHPChina 开源社区门户z#X3T~ e7A
在跳转到下一页面的时候,将session的当前id做为一个参数,传到后一个页面。 PHPChina 开源社区门户7}~l*Fo g!{.k
PHPChina 开源社区门户 oX nPW p]
8.session如何传数组 PHPChina 开源社区门户&Lrg7k lt
session_register(\'data\'); PHPChina 开源社区门户)B|1m0\"ukl
$data=array(1,2,3,4);
5~X*w~9F$H9Jx0
]J\ s$Z*MbF0 方法是先注册后赋值 PHPChina 开源社区门户7u Y+D CPYig
l+}O5~ kk0 9.问题9:我是不是可以用像$HTTP_GET_VARS[\'**\']方式来访问session值呢?
'r:B4O TL0Zju&C"Q0 PHPChina 开源社区门户I(L;g C&d;F
回答:可以,你可以使用如下global数组来访问session,以加强网页的安全性
)_;A%m:b0c$E @KY0 $HTTP_SESSION_VARS
!M%O xp.nZqP(cR0 $_SESSION
CyeZ M4s{Z9_0 例程:
|T-t:w/lXh9E0 session_start();
"kUw5NF+L:z0 $username = \'stangly.wrong\'; PHPChina 开源社区门户,P4wf[\3X m9c)hD7r F
session_register(\'username\');
(N7_ ? H F@ C)Cb0 PHPChina 开源社区门户'F'g$t` x(r
echo $HTTP_SESSION_VARS[\'username\'];
9QASO*X0YF0{0 echo \' PHPChina 开源社区门户s8{0v$i~ yW%c2\+E
\'; PHPChina 开源社区门户U(xm7Z w(A"p!Q!S8v
echo $_SESSION[\'username\']; PHPChina 开源社区门户-_-y+]0e#U aE"q {\
?>
!}o$h{db0 请参照此例程修改符合您自己的程序。 PHPChina 开源社区门户&_Fb G Y,h-I1RGL(w
;Zc k{t t0 问题10:session_unregister() 和 session_destroy() 有何区别?
.IHxX}8}}0 session_unregister()函数主要作用是注消当前的一个session变量。不过要注意的是,如果你用$HTTP_SESSION_VARS或$_SESSION在当前页面中引用过session变量,那么你可能需要和unset()配合 来注消session变量。 PHPChina 开源社区门户%U/C"LuNON
而session_destroy()是清除当前的session环境。意思就是说,当你用session_destroy()函数后,那么你就不可能再用session_is_registered()来检测session的变量了。但是需要注意的是他不能清除global中的session或使用了session cookie的中的session.所以在用session_destroy之前,最好不要用$HTTP_SESSION_VARS $_SESSION来访问session.(译自于php.net) PHPChina 开源社区门户0TM"u!f3gG
PHPChina 开源社区门户 PN iiX;[Q
例程: PHPChina 开源社区门户-^W8WAbr
if(isset($_COOKIE[session_name()])) { PHPChina 开源社区门户.QL,U.zsr$}
session_start();
E#W*` g q;`&l+f0 session_destroy();
2MiU5\{5z0 unset($_COOKIE[session_name()]);
Va!T`Kx q*x#kE G0 }
8Hk#i1qe%_0