Correction status:qualified
Teacher's comments:
二、session:
当程序需要为某个用户端的请求创建一个session时,服务器首先检查这个用户端的请求里是否已包含了一个session标识
(称为session id),如果已包含则说明以前已经为此用户端创建过session,服务器就按照session id把这个session检索出来
使用(检索不到,会新建一个),如果用户端请求不包含session id,则为此用户端创建一个session并且生成一个与此session相
引用上篇cookie的例子
public部分都是一样的,主要是在验证用户登入采用session
入口文件index.php
<?php //启动会话 session_start(); $page_title = '我是首页'; //导入页面的公共头部 include 'inc/header.php'; echo '<h2 style="color:red">我是首页</h2>'; //判断用户是否登录? if (isset($_SESSION['id']) && basename($_SERVER['PHP_SELF']) != 'logout.php') { echo '<a href="logout.php">退出</a>'; } else { echo '<a href="login.php">登录</a>'; } //导入页面的公共底部 include 'inc/footer.php';
点击 "运行实例" 按钮查看在线实例
登入判断login.php+登入表单login_page.php
<?php //启动会话 session_start(); if ($_SERVER['REQUEST_METHOD'] == 'POST') { //加载函数库 require 'inc/function.php'; //连接数据库 require 'inc/connect.php'; //验证登录 list($check, $data) = check_login($dbc,$_POST['email'],$_POST['password']); //检测是否验证通过 if ($check) { //设置session $_SESSION['id'] = $data['id']; $_SESSION['name'] = $data['name']; //跳转 redirect_user('loggedin.php'); } else { $errors = $data; } //关闭 mysqli_close($dbc); } include 'login_page.php';
点击 "运行实例" 按钮查看在线实例
<?php $page_title = '用户登录'; include 'inc/header.php'; //错误 信息显示 if (isset($errors) && !empty($errors)) { $errors_msg = '<p style="color:red">'; foreach ($errors as $msg) { $errors_msg .= $msg .'<br>'; } echo $errors_msg .'</p>'; } ?> <h2 style="color:red">用户登录</h2> <form action="login.php" method="post"> <p> <label for="email">邮箱:</label> <input type="email" name="email" id="email" value="<?php echo isset($_POST['email'])?$_POST['email']:'' ?>"> </p> <p> <label for="password">密码:</label> <input type="password" name="password" id="password" value="<?php echo isset($_POST['password'])?$_POST['password']:'' ?>"> </p> <p> <button type="submit" name="submit" id="submit">登录</button> </p> </form> <?php include 'inc/footer.php'?>
点击 "运行实例" 按钮查看在线实例
登入成功展现主体内容logedin.php
<?php //启动会话 session_start(); //登录成功页面 //判断用户是否登录? if (!isset($_SESSION['id'])) { require 'inc/function.php'; redirect_user(); } $page_title = '登录成功'; //导入页面的公共头部 include 'inc/header.php'; //heredoc echo <<< "WELCOME" <h2 style="color:red">登录成功</h2> <p>欢迎您: 亲爱的 {$_SESSION['name']}</p> <p><a href="logout.php">退出</a></p> WELCOME; //导入页面的公共底部 include 'inc/footer.php';
点击 "运行实例" 按钮查看在线实例
退出操作logout.php
<?php //启动会话 session_start(); //退出登录页面 //判断用户是否登录? if (!isset($_SESSION['id'])) { require 'inc/function.php'; redirect_user(); } else { session_destroy(); //服务器上的session信息消除 setcookie('PHPSESSID','',time()-3600); } $page_title = '退出登录'; //导入页面的公共头部 include 'inc/header.php'; //heredoc echo <<< "WELCOME" <h2 style="color:red">退出成功</h2> <p><a href="login.php">登录</a></p> WELCOME; //导入页面的公共底部 include 'inc/footer.php';
点击 "运行实例" 按钮查看在线实例
手写cookie与session