免费注册 查看新帖 |

Chinaunix

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

session for PHP全教程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-26 03:39 |只看该作者 |倒序浏览
首先声明本文并非本人原创,转帖在此只是为广大网友服务,如有哪位老大早已看到过本文,还请手下留情,不要随意拍砖
session for PHP全教程(一)
一、session概述  

    session是什么,刚开始我也不明白,非专业词典翻译为会议,会议期。作个不太恰当的比喻吧
(虽然不恰当,但意义却是一样的),session是你和网站之间的感情。 session在WEB技术中占有非常重要的份量。由于网页是一种无状态的连接程序,因此你无法得知用户的浏览状态。因此我们必须  
通过session记录用户的有关信息,以供用户再次以此身份对web服务器提供要求时作确认,例
如,我们在某些网站中常常要求用户登录, 但我们怎么知道用户已经登录了呢,如果没有session的话,登录信息是无法保留的,那岂不要让用户在每一页网页中都要提供用户名和密码。


当然,session不光用于用户身份认证功能,还可能用于其它方面,以后我们会提到的。 session用中文来解释就是会话期。一个会话期开始于用户输入一个站点的网址时,结束于他离开这个站点时。session最早出现在动态脚本语言Active Server Pages中,它的功能之强大,是一句话无法说清楚的。


当php还在3.0版本时,session是它永远的痛。虽然php具有执行速度快,使用灵活,功能强大等优点,但因为session的问题,使很多站点的开发放弃了php,至少我的老板是这样认为的。当时有很多php免费函数库提供在php3上实现session的方案,但都让人感觉不正宗。就好象你花好几千大洋买的手机却配置一个很粗糙的草作的袋子一样,虽然功能是一样的,但总让人觉得别扭。php4的出现让php在session问题上有了翻身的机会。虽然它的session实现还不是很理想(主要是效率问题),但毕竟是它自己实现的,而且可以实际使用了。 那我们用session干什么呢,你说了半天,我用不上的话,你岂不有卖纸张之嫌。OK,我们来看看session有什么用:作过网站的人都有这样的体会,在一页页面中的变量(在本章都指服务器端变量,下同)是不能在下一页中用的,虽然有一些办法可以实现,比如用form,urlstring等等,但有些对于用户来说是不方便的,即使让form自动提交,但其中的延时在现今的网络状况下足以让人窒息,而这两种方法都明显加大程序员的负担。如果你正在开发一个大型项目,那这些额外的负担是不能忽略的。而有了session就好办了,session中注册的变量可以作为全局变量使用。什么,全局变量? 好极了。这样一来,你知道有什么用了吧:最主要的用于用户身份认证,程序状态记录,页面之间参数传递。


说了它这么半天的好处,你已经动心了吧,先别高兴,它还有缺点呢:它是用文件保存的变量(当然效率不高了,虽然可以用别的方式,但很麻烦的),不能保存对象。与之相对的是,asp中的session可以保存对象变量,用内存变量来保存session变量。但为什么我们还选用php呢,呵呵, 为什么,你能从本书的开始看到这章,想必你也应该明白了吧,你还不明白,Faint,你再从头看起吧,我保证你成为PHP专家^_^。  


session是怎样实现的呢?呵呵,你一定以为很高深吧,我来告诉你它的秘密。如果说只保存变量的话,很多读者都明白,这是很简单的,但前面我们说过,http协议是一种无状态的连接,你怎么知道那个变量是谁的,这个变量又是谁的呢?在session实现中用cookie实现的。cookie存在于客户端,也就是用户的机器中,里面保存着用户的session ID,也就是session号码,当用户的浏览器请求服务器时把session ID也一起送到服务器,这样服务器就可以识别你是谁,也就可以把变量识别开了。这样我们就不难理解了,为什么有时session会失效了。不信的话,你可以试试: 在IE的"工具"菜单上有"Internet选项"菜单,打开后再选"安全"->;"自定义级别",将安全设置中的"允许使用每个对话cookies"设为禁用,再看看session能不能用。这下明白了吧!不过php4在linux/unix平台上可以自动检查cookies状态,当cookies 不可用时,自动会把session ID附带在url上进行传递。这是它在session方面比asp多的唯一的优点了。

论坛徽章:
0
2 [报告]
发表于 2004-06-26 03:49 |只看该作者

session for PHP全教程

session全教程(三)
三、session应用举例  

以下这些例子片断仅供参考,你可以定制也可以不定制session,随你便  
(1)用于用户认证  
<?  
session_start();  
$dbh = mysql_connect("localhost:3306","xxxx","xxxx";  
mysql_select_db("znsoft";//选择数据库  
$query="select userid from reguser where userid='$userid' and pass='$pass' ";  
//$userid $pass 是登录form传递过来的用户名和密码  
$res=mysql_query($query,$dbh);  
if($row=mysql_fetch($res))  
{  
$reguser=$row[0];  
?>;  
<script>;  
alert("ok,哥们,欢迎你!";  
</script>;  
<?  
}  
else  
{  
$reguser="";  
?>;  
<script>;  
alert("sorry,你不是注册用户!";  
</script>;  
<?  

//你自己放上代码吧  
}  
session_register("reguser";  
?>;  
另一页面中检查是否已经登录  
================  
<?  
session_start();  

if(isset($reguser)&&$reguser!=""//已经登录  
{  
echo "欢迎你,哥们";  
}  
else//没有登录呀  
echo "请注册吧";  
?>;  
退出功能  
===============================  
<?  
session_destroy();  
//或 $reguser="";  
?>;  

(2)用于传递变量  

本程序用于在页面之间传递变量  
<?  
$name="m.y";  
if(!sesion_is_registered("name")//没有注册session变量 name  
session_register("name";//注册 变量 name  
?>;  
第二页  
===================  
<?  
echo $name;  

//不想用了,删掉吧  
if(session_is_registered("name")//是否注册,如果已经注册  
session_unregister("name";//当然删掉啦  
?>;


<全文完>;

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-06-26 12:21 |只看该作者

session for PHP全教程

这篇文章太过时,虽然对session的原理有描述,但是后边的代码写法太老,很容易误导初学者,因此初学者一定要看置顶的帖子,一定要自己研读最新的php manual,总的来说,这是一篇过时的东西,容易误导没有鉴别能力的菜鸟,而对老鸟又没有任何价值。
longnetpro 该用户已被删除
4 [报告]
发表于 2004-06-26 14:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2004-06-27 02:38 |只看该作者

session for PHP全教程

据了解事情是这样的:

某人想学php,于是,搜索“php 教程”,得到了一堆

(搜索到的所谓的php教程是什么样子大家大概都知道)

然后,看到了一个,然后,也不看看日期,就开始学

造成了几年前的文章(多数是糟糕的)现在被认为是新事物

很常见的就是用很老的办法来配置php+apache

论坛徽章:
0
6 [报告]
发表于 2004-06-28 17:43 |只看该作者

session for PHP全教程

不过很多文章本身里面没有写作日期,然后别的网站转的时候,
又加上当时的日期,初学者就以为当时的日期是新日期了。我是经常
看见2000年初的东西,在某些资料网站上,又换成了2004年x月y日。

所以还是要看活跃的论坛的精华帖子,或者软件的manual了。
或者每个人写文章的时候,在文章里显著地表明写作日期。而不是靠系统
来添加。

论坛徽章:
0
7 [报告]
发表于 2004-06-29 05:41 |只看该作者

session for PHP全教程

其实我感觉manual比一些教程都好
但是适当还得看看好的教程。有些东西在manual里面只能看到怎么用,但是实际用起来出了什么问题,有时在manual里面找会比较困难,这个时候,好的教程就起作用了

论坛徽章:
0
8 [报告]
发表于 2004-06-30 00:02 |只看该作者

session for PHP全教程

   体无完肤了,汗

论坛徽章:
0
9 [报告]
发表于 2004-07-05 01:13 |只看该作者

session for PHP全教程

本人学php才入门,标准菜鸟一个,用DreamWeaver写PHP程序。以前用MX版本时,由其生成的代码中的全局变量的写法都是$HTTP_***_VARS[]格式,前一阵改用DreamWeaverMX 2004,发现对php的支持改进了许多,且支持session,相应的代码写法也变成了$_***[]格式,应该是适应php新版本对“register_globals”为“off”的改进,但其生成的代码中仍有“session_register()”语句,不解。不知DWMX 2004版中针对“register_globals”为“off”作了改进的猜测是否准确,请用DreamWeaver写过php的高手解答一下。
多谢!

论坛徽章:
0
10 [报告]
发表于 2004-07-05 10:19 |只看该作者

session for PHP全教程

没用那个写PHP。
一直用Editplus
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP