免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 13901 | 回复: 24
打印 上一主题 下一主题

session机制的论述!!以及和cookie的比较! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-06 00:18 |只看该作者 |倒序浏览
我虽然接触php的时间也不短了,但我在php中却对session和cookie却在具体的编程中没有用过。

我最早认识session和cookie的概念还是三年前学习asp知道的,后来一直没用过。
在asp中还有applaction的概念。在我的脑海中,applaction和seesion都是服务器上存储机制,applaction(在php似乎没有这个概念,当我在asp中用这个编过计数器)对于每个浏览者是共享的,而seesion是每个用户都有自己的session。他们的生命周期一般是用户打开某网站浏览器到关闭与次网站连接所有的浏览器后结束。cookie这是在用户端的存贮机制,他需要用户的大开cookie支持,

目前在用户注册登录时,我觉得有必要用到session。需要对此进一步了解。

在php中有关session的函数主要有如下这些:
session_start: 初始 session。
session_destroy: 结束 session。
session_name: 存取目前 session 名称。
session_module_name: 存取目前 session 模组。
session_save_path: 存取目前 session 路径。
session_id: 存取目前 session 代号。
session_register: 注册新的变数。
session_unregister: 删除已注册变数。
session_is_registered: 检查变数是否注册。
session_decode: Session 资料解码。
session_encode: Session 资料编码。

但是我觉得函数不是关键的问题,主要是先搞清session到底是怎样的机制。我稍微看了一下有关的资料。给人的感觉是session其实是在服务器端的tmp目录下的某一个文件中为每个用户储存一些变量,对session的操作其实是对文件读写操作。请有关高手高谈阔论!
     

我想知道tmp目录到底放在哪里呢,我好像在win2000用搜索找不到tmp目录。只有temp目录     

如下的代码在我本地机上会出现错误警告信息,上传到my8868.com
网站(我在虎翼的服务器)上没问题。我想可能是tmp目录所在的目录的权限没有弄好,当有不知道tmp目录所在的地方

<?
echo session_save_path();
session_start();
session_register('count');
$count++;
echo "<>;You've been here $count times.</p>;";
?>;

/tmp
Warning: Cannot send session cache limiter - headers already sent (output started at c:\inetpub\wwwroot\my8868\test.php:2) in c:\inetpub\wwwroot\my8868\test.php on line 3

Warning: open(/tmp\sess_5a0e8bd0b49308a4abf652cbff6fcd1b, O_RDWR) failed: m (2) in c:\inetpub\wwwroot\my8868\test.php on line 3

You've been here 1 times.


Warning: open(/tmp\sess_5a0e8bd0b49308a4abf652cbff6fcd1b, O_RDWR) failed: m (2) in Unknown on line 0

Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0
          

现在我已经知道上面引起的原因了!Cannot send session cache limiter - headers already sent 是由于在前面有echo
Warning: Failed to write session data (files). 是由于
在windows2000+IIS下,没有php.ini文件。session_save_path没设置。     [/b]   我在win2000+IIS下没有php.ini也可以正常运行!???
我的系统是win2000+IIS,没有想常规一样把php.exe和php.ini文件复制到winnt目录下,把dll文件拷到system32目录下,但是ph可以很好的运行,是不是在没有php.ini配置文件的情况下win2000+IIS,会调用一个默认的配置文件?
但是我最近想使用session的功能,出现上面的警告信息:后来加上php.ini文件并把session.save_path = c:/temp
默认为session.save_path = /tmp
并在c:目录下建一个temp 目录,它的权限为可读写!就行了!     
     

在php中,seesion的机制是文件,还不是想asp那样是对象的概念,也不是放在内存,觉得在session就像存储在文件里一个全局变量。而且需要session cookie的配合。(即如果客户端cookie关掉就不行了,虽然url的方式也可以)session最对提供了方便管理全局变量的方式,其实自己用文件操作可以实现,在速度方面好像没有优势。

论坛徽章:
0
2 [报告]
发表于 2003-07-06 11:12 |只看该作者

session机制的论述!!以及和cookie的比较!

请大家都来谈谈自己的对session有关认识!     

论坛徽章:
0
3 [报告]
发表于 2003-07-06 22:26 |只看该作者

session机制的论述!!以及和cookie的比较!

不会

论坛徽章:
0
4 [报告]
发表于 2003-07-07 08:38 |只看该作者

session机制的论述!!以及和cookie的比较!

说的不错!

论坛徽章:
0
5 [报告]
发表于 2003-07-07 12:43 |只看该作者

session机制的论述!!以及和cookie的比较!

方便性也是一方面,用地址栏自然没有用session方便了;而且地址栏长度有限制的,session可以传数组,甚至大的对象都可以。

论坛徽章:
0
6 [报告]
发表于 2003-07-07 13:17 |只看该作者

session机制的论述!!以及和cookie的比较!

对session的认识的补充!session在各个窗口是如何运行。     
我先来做个试验我php版本是4.02,
首先我们来建立两个文件。

test1.php
<?
session_start();
session_register("count";
echo $count=0;
?>;

test2.php
<?
session_start();
echo $count++;
?>;

打开两个浏览器窗口,标记为A和B
在A浏览器的窗口中执行test1.php,这时我们应该看到浏览器中显示的值是0。这时在tmp目录下会生成一个文件名为sess_72449e735acfa944d629d05f12e26d81的文件。内容count|i:0;
继续在A浏览器的窗口中执行test2.php,并不断的刷新它,我们就会看到浏览器中的数值在不断的递增,这时在tmp目录下仍然是只有上面那个文件名,内容count的值变化了,说明我们的session是起作用的。我们继续看看其他的情况,在B浏览器的窗口中执行test2.php,没有显示,继续刷新,仍没有显示。这时在tmp目录下会生成一个文件名为sess_26c0deb5b640cd9d9466b174dc051816,内容为空!再打开第三个浏览器窗口C并在其中执行test2.php,也是没有显示,这时在tmp目录下会生成一个文件名为sess_8b6934cd6a2f5a60e3d1c4eca9b3609e。这说明session不能跨窗口运行。并且每个窗户生成一个文件     如果在A窗口用文件》》新建窗口得到窗口D时,刷新,浏览器中的数值在不断的递增  ,sess_72449e735acfa944d629d05f12e26d81  内容count的值变化了,所以窗口具有继承性!session可以在 继承的窗口传递。   
  

可是问题有出来了,我把这两个文件上传到我网站做试验,
www.my8868.com
结果是不同的窗口也可以传递!我不知它的php版本是怎样以及php.ini是如何配置的,   

后来我有发现,www.my8868.com网站上session的保存期好像是永远,我关掉所有连接此网站的窗口,重新打开网页,session的值还是保存着,电脑用户注销后,也是不消失,重新启动也一样,但同样是这些文件在我机子上执行,session的值消失了。这里又出来一个session生命周期的问题这样session与cookie不是一样了吗,在我的印象中session的生命周期应该是从用户连上服务端网站到用户离开结束。如果session的生命周期可以变化,而且是需要cookie session的支持,又是读文件操作,效率不高,还不如用cookie实现有关功能,在我看来seesion没有什么作用,其他人有没有其他的看法!

我的留言版
http://www.my8868.com/second_folder1/message_board/message_board_index.php
的用户注册功能的实现,我首先想到是用session的机制,因为在以前的印象中seesion是服务器端,执行速度一定比cookie快,不需要受客户端的限制,(因为cookie在用户端关掉cookie支持后就不能用了)可是现在发现 session也需要cookie机制的支持,所以我真怀疑php中session的优越性!用户注册 ,网上购物,这些系统应该是用se'ssion的,可是.....
你们会选择用session还是cookie。
     

论坛徽章:
0
7 [报告]
发表于 2003-07-07 14:16 |只看该作者

session机制的论述!!以及和cookie的比较!

session用的好的话,还可以。如果用不好的话,问题真是多多啊,我是深有感触啊!

论坛徽章:
0
8 [报告]
发表于 2003-07-07 21:29 |只看该作者

session机制的论述!!以及和cookie的比较!

我一直用cookie

论坛徽章:
0
9 [报告]
发表于 2003-07-08 07:59 |只看该作者

session机制的论述!!以及和cookie的比较!

session的生命周期可以在php.ini修改阿。

论坛徽章:
0
10 [报告]
发表于 2003-07-08 13:18 |只看该作者

session机制的论述!!以及和cookie的比较!

session是针对每一个用户的,变量的值保存在服务器上,但是如何区分是哪个用户session变量呢,这里就有一个sessionID,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器。目前,有的浏览器的sessionID不能跨页,有的可以,如IE,MYIE2对session的处理是不同的,后者只要你开过这个网站的页面,即使关闭后(指关闭子窗口,它是多页面浏览器),再重新打开,sessionID依然存在,而无需重新注册。sessionID是经过加密,加密算法比较复杂,被黑的可能性很小,而cookie是保存在客户机子上,安全性较差。另外,如楼上所说,session可以设置有效或无效,可手工建立,也可自动建立,可以设置过期时限。
另外,你所说的tmp可能只是环境变量而已,不是一个物理目录,可设置指向到用户物理的临时目录。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP