|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
咱们就开始学习动态语言的概念吧,刚一接触动态语言,可能很多人都会蒙了,怎么这乱七八糟的东西,在网页里显示的时候却是另外一码事?其实这并不算乱七八糟,你写的HTML代码不也一样是一堆堆的字符吗?毕竟,代码并不是作为直接输出的,而是经过处理的,说白了,HTML是经过HTML解析器,而PHP当然也就通过PHP解析器了,跟学习HTML一样的道理,想让任何的解析器完成操作,就必须使用它们专用的语法结构,所以PHP长相奇怪也就不足为奇了。cookie|session Session是不是必需依附Cookie?
www.ouryh.net 银河手艺在线U收拾整顿工夫:2001-8-7U作者: 不详 U来历: 不详 U浏览:36
PHP中的session可以默许情形下是利用客户真个Cookie(以便和通俗意义上的Cookie区分,我称之为session cookie,通俗意义上的Cookie为Cookie)来保留session id的,然而PHP中的session是不是只能利用session cookie呢?固然不是,不然何须还弄个session出来,不如直接用Cookie算了.Session的一大长处就是当客户真个Cookie被禁用时会主动把session id附在URL中,如许再经由过程session id就可以记住session变量了.
上面我写两个文件来证明一下,起首在阅读器中设置禁用Cookie.
<? //文件名为test1.php
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>
";
?>
<?//文件名为test2.php
session_start();
if (session_is_registered("url")) {
echo "Congratulations.
";
$url="test1.php";
echo "<a href=$url>goto test1.php</a>
";
}
else echo "Failed.
";
?>
如今在阅读器中输出"http://localhost/test1.php",把鼠标移到链接上看看形态栏上的地址,不是复杂的"http://localhost/test2.php",而是这类模式:"http://localhost/test2.php?PHPSESSID=6e3610749f7ded3784bc4a4dd10f879b".你还可以检查Html的源文件,源文件是这类模式:
<a href="test2.php?PHPSESSID=6e3610749f7ded3784bc4a4dd10f879b">goto test2.php</a>
所以说这完整是PHP的功烈,和阅读器有关,也就是说不管你用甚么阅读器session都无效,而不是有的人以为的只对IE有效.
然而,咱们的超链接是语句是由echo语句输入的,假如超链接不包括在PHP的标签<? ?>以内会如何呢?仍是写个例子来验证一下,把test1.php稍作修正:
<?
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>
";
?>
<a href="test2.php">(Html模式)goto test2.php</a>
在阅读器中输出"http://localhost/test1.php",分离把鼠标移到两个链接上看看有无分歧?可以看到,两个链接是完整不异的,前面城市主动附带session id.所以不用忧虑没被包括在PHP标签中的链接会生效,PHP不会这么笨的.
然而在利用时要注重必需先用session_start()函数告知PHP入手下手用session,哪怕你在这个文件中只要html代码,如:
<? session_start();?>
<html>
<head>
<body>
<a href=test2.php>gogogo</a>
…………
记得有人说过这个长处只能在linux/unix下才干发扬出来,而我用的Win2000p+Apache1.3.17+Php4.0.4pl1,PHP为Apache模块体例,却照样可以.恰好相反,我转到linux下去测试时反而不可了.实际上是在编译时的一个选项--enable-trans-sid掌握了这项功效可否有效.而依照PHP默许来编译时是没有翻开这项功效的,只需从头编译时到场它就能够了.我的设置装备摆设为Apache1.3.17+Php4.0.4pl1,PHP为Apache模块体例,在linux从头编译后用Netscape Navigator4.7测试可以经由过程(这更证实了和阅读器有关).
只靠session是不克不及跨窗口利用的,即便你启用了Cookie,当你在一个窗口中有一个正当的session id(纪录在session cookie中,不是URL中),再新开一个窗口进入不异页面时,你会从头具有一个新的session id,而与前一个窗口互不影响.要想跨窗口利用统一个session id就只能在URL后指定session id,也就是说假如你把带有session id的的窗口的URL复制,在新开的窗口中粘贴一下,仍是照样利用的.晓得了session id的这个道理要完成跨窗口session仍是不难的,可以把Cookie与session联合起来,起首获得以后正当的session id,然后把它纪录在Cookie中,在其它窗口读取Cookie便可取得以后的Session id了.详细完成我记得在phpuser上有一篇文章专门会商过.
最初再说一下:
①常常有人问到"为何copy你写好的代码,却会失足,你也太……",再把失足提醒拿来一看:
Warning: open(/tmpsess_eca1da208748db2e9c6bec1fccc182b4, O_RDWR) failed: m (2) in c:/www/test1.php on line 2
实际上是他本人的成绩:session寄存的途径/tmp不存在.有两种举措:一是在根目次(通常为C:)建一个名为tmp的目次;二是修正php.ini文件
session.save_path = /tmp ;
把/tmp目次用相对途径指定一个目次(固然必需存在),如我的php.ini中
session.save_path = G:PHPtempsession ;
②还有一种情形的失足信息为:
Warning: Cannot send session cache limiter - headers already sent (output started at
c:/www/test1.php:1) in c:/www/test1.php on line 2
这是由于你在用session_start()之前已数据输入到客户端了,好比说Html标签、文字乃至是空格都不可,所以最好在法式第一句就用session_start().
好了,说了这么些,都是我亲身实验经由过程的,假如有不合错误的或禁绝确的中央接待会商(xcloudy@china.com).
我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。 |
|