海妖 发表于 2015-2-16 00:28:32

PHP网站制作之Session是不是必需依附Cookie

咱们就开始学习动态语言的概念吧,刚一接触动态语言,可能很多人都会蒙了,怎么这乱七八糟的东西,在网页里显示的时候却是另外一码事?其实这并不算乱七八糟,你写的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).
   我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。

愤怒的大鸟 发表于 2015-2-16 03:59:10

对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。

分手快乐 发表于 2015-2-22 06:23:56

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

爱飞 发表于 2015-3-6 23:08:08

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

小女巫 发表于 2015-3-17 00:19:49

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

老尸 发表于 2015-3-17 03:10:27

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

若相依 发表于 2015-3-19 08:49:54

其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎

兰色精灵 发表于 2015-3-27 15:10:57

兴趣是最好的老师,百度是最好的词典。

蒙在股里 发表于 2015-3-31 19:21:28

首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。

因胸联盟 发表于 2015-4-13 00:38:43

使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的

admin 发表于 2015-4-16 20:08:11

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

飘飘悠悠 发表于 2015-4-18 07:47:43

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

小魔女 发表于 2015-4-20 17:43:29

兴趣是最好的老师,百度是最好的词典。

深爱那片海 发表于 2015-4-29 13:59:02

实践是检验自己会不会的真理。

谁可相欹 发表于 2015-5-2 02:15:57

小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。

莫相离 发表于 2015-5-2 02:20:40

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

山那边是海 发表于 2015-5-9 23:35:50

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

柔情似水 发表于 2015-6-24 20:55:21

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

精灵巫婆 发表于 2015-7-11 21:05:52

学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql

活着的死人 发表于 2015-7-14 22:44:07

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
页: [1]
查看完整版本: PHP网站制作之Session是不是必需依附Cookie