15.会话控制

Cookie的应用

向客户端计算机中设置Cookie

可以使用PHP内建setCookie()函数来建立一个Cookie。Cookie是HTTP标头的一部分,setCookie()函数必须在其他信息被输出到浏览器前调用,所以即使是空格或空行,都不要在调用setCookie()函数之前调用

image-20201101223300025

image-20201101223340853

使用PHP读取Cookie的资料内容

在PHP中使用全局数组$_COOKIE来获取Cookie的内容,并以Cookie的识别名称为索引值、内容值为元素,在设置Cookie的脚本中,第一次读取它的信息并不会生效,必须刷新或到下一个页面才能看到Cookie的值,因为Cookie要先被设置到客户端,再次访问时才能被发送回来,这时才能被获取。

<?php
    #设置Cookie
    setcookie("username","siqu",time()+24*60*60*7);
?>
<?php
    #打印COOKIE
    print_r($_COOKIE);
?>

数组形态的Cookie应用

在Cookie标识名称中指定数组下标的形式设置

<?php
    #设置Cookie
    setcookie("user[username]","siqu");
    setcookie("user[password]",md5("12345"));
?>
    <?php
        foreach ($_COOKIE["user"] as $key => $value) {
            echo $value."<br/>";
        }
    ?>
#运行结果:
#siqu
#827ccb0eea8a706c4c34a16891f84e7b
?>

删除Cookie

  • 使用setCookie()函数实现删除的动作,省略第二个参数,只指定第一个参数的名称,删除指定的Cookie
  • 将setCookie()设置成为已过期动作

基于Cookie的用户登录模块

以下是index.php文件中的代码

<!DOCTYPE html>
<html>
<head>
    <title>使用Cookie记录用户登录状态</title>
</head>
<body>
    <form action="index.php?action=login" method="post">
        用户:<input type="text" name="username"><br/>
        密码:<input type="text" name="password"><br/>
        <input type="submit" value="登录">
    </form>
    <?php
        if($_GET["action"]=="login"){
            echo $_POST["username"].$_POST["password"];
            if($_POST["username"]=="siqu" and $_POST["password"]=="123"){
                setCookie('username',"siqu",time()+60*60);
                setCookie('password',"123",time()+60*60);
                header("Location:login.php");
            }else{
                echo "用户名或者密码错误"."<br/>";
            }
        }
    ?>
</body>
</html>

以下是login.php的代码

<!DOCTYPE html>
<html>
<head>
    <title>主页</title>
</head>
<body>
    <form action="login.php?action=logout" method="post">
        <input type="submit" name="sub" value="退出">
    </form>
    <?php
        echo $_COOKIE["username"]."<br/>";
        echo $_COOKIE["password"]."<br/>";
        echo "ok";
        if($_COOKIE["username"]=="siqu" and $_COOKIE["password"]=="123"){
            echo "欢迎登陆".$_COOKIE["username"]."<br/>";
        }else{
            echo "你还没有登陆"."<br/>";
        }
         if($_GET["action"]="logout"){
            setcookie("username");
            setcookie("password");
         }
    ?>
</body>
</html>

Session的应用

当然,在使用COOKIE时,会有各种各样的问题,比如,用户在用户端可以禁止使用COOKIE,这样COOKIE就无法发挥作用,因此,出现了Session,Session会将相应的信息存储在服务器端,而不是用户端,使用者无法停止Session的使用。

配置Session

image-20201105101934942

image-20201105102014523

  • Session的声明与使用

image-20201105103036230

使用session_start函数,用于初始化session,返回值均为True,主要有两个作用,一是开始一个会话,二是返回已经存在的会话

  • 注册一个会话变量和读取session

注册和读取session都必须使用全局数组$_SESSION来完成,当然,在这之前,必须要启动session。session文件的路径由php.ini中的session.save_path属性来决定

<?php
#启动session
session_start();

#设置一个session
$_SESSION["name"]="siqu";

#读取session
echo $_SESSION["name"];

// 运行结果:
// siqu
?>
  • 注销变量与销毁session

image-20201105104209073

使用这个函数删除session,并不会删除服务器中session的变量,也不会删除客户端中存储session id的Cookie,因此,我们需要删除session变量和删除cookie中session的id

<?php
#启动session
session_start();

#设置一个session
$_SESSION["name"]="siqu";

echo $_SESSION["name"]."<br/>";

#第一步删除,所有session变量,也可使用unset()删除单个变量
$_SESSION=array();

#第二步删除,删除存储session id的cookie,使用session_name()获取session的id
setcookie(session_name());

echo $_SESSION["name"]."空";

// siqu
// 空
?>
© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
四曲的头像-四曲博客

昵称

取消
昵称表情代码图片