ddxiami

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2561|回复: 4

[细说PHP] 第23章会话控制--一个简单的邮件系统实例

[复制链接]
发表于 2013-8-9 14:42:13 | 显示全部楼层 |阅读模式
<?php
        /**
                file: conn.inc.php 作为数据库连接的公共文件
        */
        define("DSN", "mysql:host=localhost;dbname=testmail");          //定义连接MySQL的DSN
        define("DBUSER", "mysql_user");                                 //MySQL的登录用户
        define("DBPASS", "mysql_pwd");                                  //MySQL的登录密码
       
        try {
                $pdo = new PDO(DSN, DBUSER, DBPASS);                        //创建连接数据库的PDO对象
        }catch(PDOException $e) {
                die("连接失败:".$e->getMessage());                         //失败退出并打印错误报告
        }
回复

使用道具 举报

 楼主| 发表于 2013-8-9 14:42:26 | 显示全部楼层
<?php
        /**
                file:login.php 提拱用户登录表单和处理用户登录
        */
        session_start();      
        /* 包含连接数据库的文件connect.inc.php */
        require "connect.inc.php";      
        /* 如果用户单击提交表单的事件则进行验证 */
        if(isset($_POST['sub'])) {                     
        /*使用从表单中接收到的用户名和密码,作为在数据库用户表user中查询的条件 */
                $stmt = $pdo->prepare("SELECT id,username FROM user WHERE username=? and userpwd=?");
                $stmt -> execute(array($_POST["username"], md5($_POST["password"])));
                /*如果能从user表中获取到数据记录则登录成功*/
                if($stmt->rowCount() > 0){                  
                        $_SESSION = $stmt -> fetch(PDO::FETCH_ASSOC);                //将用户信息全部注册到Session中
                        $_SESSION["isLogin"]=1;                                                 //注册一个用来判断登录成功的变量
                        header("Location:index.php");                                              //将脚本执行转向邮件系统的首页
                }else{                                     
                        echo '<font color="red">用户名或密码错误!</font>'; //如果用户名或密码无效则登录失败   
                }       
        }
?>
<html>
        <head><title>邮件系统登录</title></head>
        <body>
                <p>欢迎光临邮件系统,Session ID:<?php echo session_id(); ?></p>   
                <form action="login.php" method="post">
                        用户名:<input type="text" name="username"><br>
                        密&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" name="password"><br>
                        <input type="submit" name="sub" value="登录">
                </form>
        </body>
</html>

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-9 14:42:35 | 显示全部楼层
<?php
        /**
                file:index.php 主页面,用于显示用户信息及当前用户的邮件信息
        */
        session_start();                                                   
        /* 判断Session中的登录变量是否为真 */
        if(isset($_SESSION['isLogin']) && $_SESSION['isLogin'] === 1){                             
                echo "<p>当前用户为:<b> ".$_SESSION["username"]."</b>,&nbsp;";  //输出登录用户名
                echo "<a href='logout.php'>退出</a></p>";                                                 //提供退出操作链接
        /* 如果用户没有登录则没有权限访问该页 */
        }else{                                              
                header("Location:login.php");                                                                  //转向登录页面重新登录
                exit;                                                                                                                        //退出程序而不向下执行
        }
?>
<html>
        <head><title>邮件系统</title></head>
        <body>
                <?php
                        /* 包含连接数据库的文件 */
                        require "connect.inc.php";                         
            /* 通过Session中传递的user id,作为mail表的查询条件,获取这个用户的邮件列表 */
                        $stmt = $pdo -> prepare("SELECT id, mailtitle, maildt FROM MAIL WHERE uid=?");
                        $stmt -> execute(array($_SESSION['id']));
                ?>
                <p>你的信箱中有<b><?php echo $stmt -> rowCount(); ?></b>邮件</p>
                <table border="0" cellspacing="0" cellpadding="0" width="380">
                        <tr><th>编号</th><th>邮件标题</th><th>接收时间</th></tr>
                        <?php
                                while(list($id, $mailtitle, $maildt) = $stmt -> fetch(PDO::FETCH_NUM)) {
                                        echo '<tr align="center">';                           
                                        echo '<td>'.$id.'</td>';                                     //输出邮件编号
                                        echo '<td>'.$mailtitle.'</td>';                                //输出邮件标题
                                        echo '<td>'.date("Y-m-d H:i:s",$maildt).'</td>';         //输出邮件接收日期
                                        echo '</tr>';
                                }
                        ?>
                </table>
        </body>
</html>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-9 14:42:42 | 显示全部楼层
<?php
        /**
                file: logout.php 注销用户的会话信息,用户退出
        */
        session_start();           
        /* 从Session中获取登录用户名 */
        $username = $_SESSION["username"];         
        /* 删除所有Session的变量 */
        $_SESSION = array();                                          
        /* 判断是否是使用基于Cookie的Session, 删除包含Session Id的Cookie */       
        if (isset($_COOKIE[session_name()])) {            
                   setcookie(session_name(), '', time()-42000, '/');          
        }
        /* 最后彻底销毁Session */
        session_destroy();                                     
?>
<html>
        <head><title>退出系统</title></head>
        <body>       
                <p><?php echo $username ?>再见!</p>
                <p><a href="login.php">重新登录邮件系统</a></p>
        </body>
</html>

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|技术文档库 ( 闽ICP备15017263号-2 )|网站地图

GMT+8, 2025-5-18 23:03 , Processed in 0.042237 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表