Correcting teacher:Guanhui
Correction status:qualified
Teacher's comments:session_id是服务端生成的,不是客户端!一定要多加练习~!
cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。
创建cookie可以使用setcookie()
函数或者header()
函数,函数需要在<html>
标签之前。
setcookie()
:其语法是:setcookie(name, value, expire, path, domain)
,其中name和value是必选,其他参数根据情况可选
<?php
// 示例:设置一个cookie,1小时后过期
setcookie("user","Alice",time()+60*60);
print_r($_COOKIE);
header()
<?php
// 示例:设置一个cookie
header('Set-cookie:username = Jack');
print_r($_COOKIE);
<?php
// 方式一:查看单个
echo $_COOKIE['user'],'<br>';
// 方式二:查看所有
print_r($_COOKIE);
<?php
// 将cookie的过期时间设置为过去
setcookie("user","Alice",time()-3600);
print_r($_COOKIE);
<?php
// 更新cookie
setcookie("username","Lisa");
// 设置cookie后第一次刷新浏览器,cookie在response headers这里,这表示服务器告知浏览器有一个cookie需要你来保存一下
// 第二次刷新后,cookie就会存在于request headers这里了
// 更新cookie时,参数要一一对应
setcookie("username","Lisa666");
<?php
// setrawcookie():防止存放cookie时,浏览器对它进行URL编码
// 先设置好两个示例cookie,开发工具中查看
setcookie("user","小明");
setcookie("email","666666@qq.com");
// 然后使用setrawcookie()对cookie值更新
setrawcookie("user","小王");
setrawcookie("email","888888@qq.com");
PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。
在把用户信息存储到 PHP session 中之前,必须先启动会话,必须位于<html>
标签之前。
先找到php.ini,设置 session.auto_start = 0
然后,开启会话:
<?php
// 开启会话
session_start();
<?php
// 开启会话
session_start();
// 设置session
$_SESSION["user"] = "Alice";
$_SESSION["email"] = "123456@qq.com";
<?php
// 开启会话
session_start();
// 设置session
// $_SESSION["user"] = "Alice";
// $_SESSION["email"] = "123456@qq.com";
// 取回session
echo $_SESSION['user'],'<br>';
echo $_SESSION['email'];
<?php
// 开启会话
session_start();
// 设置session
// $_SESSION["user"] = "Alice";
// $_SESSION["email"] = "123456@qq.com";
// 取回session
// echo $_SESSION['user'],'<br>';
// echo $_SESSION['email'];
// 销毁session
// 方式一:销毁单个
// unset($_SESSION['user']);
// echo $_SESSION['user'],'<br>';
// echo $_SESSION['email'];
// 方式二:销毁所有
session_destroy();
echo $_SESSION['user'],'<br>';
echo $_SESSION['email'];
<!-- 第二步:获取表单中的用户名和密码 -->
<?php
// 表单提交后拿到提交过来的值
$posts = $_POST;
// 清除两侧空白字符
foreach ( $posts as $key => $value ) {
$posts[$key] = trim($value);
}
// 接收数据(用户名和密码)
$username = $posts['username'];
$password = $posts['password'];
// 自定义一个函数,用于清除页面的cookie信息,
function cleCookie () {
setcookie("username"," ",time()-3600);
setcookie("password"," ",time()-3600);
setcookie("isLogin"," ",time()-3600);
}
// 判断用户是否点击了登录按钮
if ($posts['submit']) { // 如果submit存在,表示点击了登录
if ( $username == 'longlong' and $password == '123456' ) {
cleCookie();
setcookie("username",$username,time()+7*24*60*60);
setcookie("password",$password,time()+7*24*60*60);
setcookie("isLogin","1",time()+7*24*60*60);
// 将正确的cookie储存好以后跳转到主页
header("Location:4.index.php");
} else {
exit('用户名或密码有误,请重新登录');
}
}
// 当退出账户时
if ($_GET['action' == 'out']) {
cleCookie();
}
?>
<!-- 第一步,写好登录页面 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>用户登录</title>
</head>
<body>
<h2 style="text-align: center;">用户登录</h2>
<!-- action为空,表示提交到当前页面 -->
<form action="" method="POST" style="text-align: center;">
<div>
<label for="username">用户名:</label>
<input type="text" name="username" id="username">
</div>
<div>
<label for="password">密 码:</label>
<input type="password" name="password" id="password">
</div>
<div style="margin-top: 5px;">
<input type="submit" name="submit" value="登录" style="width: 80px;">
</div>
</form>
</body>
</html>
<!-- 检查用户是否登录成功 -->
<?php
if (!isset($_COOKIE['isLogin']) or $_COOKIE['isLogin'] != "1") {
exit('<script>
alert("请您先登录再访问");
location.href="3.login.php";
</script>');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>龙大商城</title>
</head>
<body>
<h2>龙大商城主页</h2>
<?php echo '欢迎' . $_COOKIE['username'] . '的到来!' ?>
<a href="3.login.php?action=out" style="text-decoration: none;color: white;background: gray;">退出账户</a>
</body>
</html>
这次作业,感觉懵懵懂懂的写完了,貌似效果也出来了,但是全程都是用的cookie在操作,清除cookie,重新设置cookie,设置cookie过期时间,也不知道到底是我设置的cookie起了作用,还是浏览器在帮我自动保存,有点懵,只不过现在去登录,已经自动保存了用户名和密码。另外session没有用到,我在想是不是应该定义一个session变量,来控制cookie是否储存,后面我再敲敲代码试试。