Linux中国 | Linux.cn - 我们的Linux中文社区

 找回密码
 加入

QQ登录

QQ登录

搜索

【PHP学习】SESSION的使用

热度 6已有 1434 次阅读2010-11-10 20:06 |个人分类:PHP|关键词:session php 学习 cookie 利弊 会报 事项

PHP学习

因为本人能力和水平有限无力讨论SESSION和COOKIE的利弊和好坏,只是把自己学到和掌握的关于SESSION的使用罗列于下:

使用例子:

一个注意事项:

不知道什么原因,如果不更改以下两个参数,总是会报错。为了解决这个问题,我修改了PHP.INI文件中的两个参数,这样再使用SESSION时就不容易报错了。

output_buffering = on  该值为ON时,将在所有脚本中使用输出控制;若该值为一个数字,则代表缓冲区的最大字节限制,当缓存内容达到该上限时将会自动向浏览器输出当前的缓冲区里的内容。
session.auto_start = 1 开启就自动完成session_start()了,=0,=1的区别就在于在用SESSION前是否需要session_start();1为开启,0为关闭。

一、用户登录,用SESSION保存用户名。

<?php
    
    if ($username) //如果用户名不为空
    {
        
        $password=md5($password);//对输入的密码进行MD5加密
        $sql="select * from user where username='$username' and password='$password'";

        //生成SQL查询语句,用来判断用户名和密码是否正确。
        $result=mysql_query($sql);//使用SQL查询
        $num_rows=mysql_num_rows($result);//判断用户名和密码是否存在和正确
        if ($num_rows==1)//如果用户名和密码正确
        {
            $row=mysql_fetch_assoc($result);//获取数据库中保存的相应的用户名的记录。
            $_SESSION['username']=$row['username'];设置$_SESSION['username'],用来保存用户名
            $_SESSION['realname']=$row['realname'];设置$_SESSION['realname'],用来保存真实姓名
            $_SESSION['glqx']=$row['glqx'];设置 $_SESSION['glqx'],用来保存管理权限
            header("location:index.php");将页面转向INDEX.PHP
                    
        }
        else {
            die('<h2 align="center">用户名或者密码错误!请<a href="login.php">返回</a>。</h2>');//如果用户名和密码错误则提示错误
            }        
        
    }

?>

二、当用户发表文章时,引用SESSION作签名用。

直接设置一个变量等于$_SESSION['realname'] ;就能够引用相应的SESSION变量

$jbry=$_SESSION['realname'] ;将$_SESSION['realname'] 的值赋给变量$jbry,即举报人员。

三、当用户退出时,注销SESSION.

<?php
  
    $_SESSION=array();删除$_SESSION全局变量数组

    SESSION_unset();释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的 session id
    SESSION_destroy();删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留
  
?>

希望通过这三个例子的演示,朋友们能够明白如何用PHP实现用户和权限管理的设计。

因为,我也只是在刚学PHP,欢迎大家交流,如果大家感兴趣的话,可以向我索取PHP的源码。

PS:注,本人最近正在编写一个OA系统,就是纯练习。不过,因为是第一回写PHP,没有做太多的注释,所以还请不要抱太大的希望。我想等我完完全全写好之后,再注释上。如果有可能的话,我会将它开源的。虽然,也不是什么好东西。哈哈。

wuanshou@gmail.com

 

本文系wuanshou原创,版权归wuanshou及Linux中国所有,转贴请注明。

发表评论 评论 (7 个评论)

回复 robin 2010-11-11 11:33
我也是PHPer,我们可以一起研究下:)
回复 wuanshou 2010-11-11 15:13
robin: 我也是PHPer,我们可以一起研究下:)
请多多指教
回复 wxy 2010-11-11 22:18
1、session.auto_session 我一般不设置为自动开始,只在需要时设置即可,比如可以放在公共INCLUDE的文件中。
此外,你还可以设置session的名称,这个其实是避免和其他的session冲突。
另外,session和cookie是不冲突的,session你可以当成是即时cookie(虽然实际上不是)。如果浏览器不支持cookie,session会自动通过GET方式传递session的key,而不是在cookie中存储这个key。
回复 wxy 2010-11-11 22:21
2、之所以你打开了output_buffer来保障session,我估计是因为你在设置session之前就已经有了输出了,而session又是通过在任何输出内容之前的header里面的cookie设置的,如果有了输出,那么cookie就设置不成了——output_buffer可以保证正确处理输出的顺序来避免这个问题,当然,这个用途应该说是 output_buffer的副作用。
所以,你这样用是可以的,但是并不是根本的解决方法。

以上,供参考:》
回复 wuanshou 2010-11-11 22:26
wxy: 2、之所以你打开了output_buffer来保障session,我估计是因为你在设置session之前就已经有了输出了,而session又是通过在任何输出内容之前的header里面的cookie设置
可是为什么,我总是第一句就开启SESSION.可是为什么总是报错呢。真的是服了。我真不明白。
通常我都是第一句就
<?php session_start();?>
还是报错。出于无奈,我才更改PHP.INI的
回复 wxy 2010-11-11 22:51
wuanshou: 可是为什么,我总是第一句就开启SESSION.可是为什么总是报错呢。真的是服了。我真不明白。
通常我都是第一句就
<?php session_start();?>
还是报错。出于无
需要注意的是,你的程序的开始,连个空格都是不能有的。此外,如果你的代码文件是UTF-8编码的,切记不要用NOTEPAD编辑,会给你加上UTF8 BOM头的,使用UltraEdit或者其他的编辑器,删除这个东西。
APACHE/PHP在处理BOM上有问题,不能忽略这个。
回复 wuanshou 2010-11-12 08:17
果然切中问题的根源。我用的还真是UTF-8,还真是用NOTEPAD编辑的。难怪如此。多谢提点。等我下回再编的时候,我一定注意。

facelist

你需要登录后才可以评论 登录 | 加入

无觅相关文章插件