php中会话控制

第十一章 会话控制

cookie

概述

cookie是用来将网站的资料记录在客户端的技术,这种技术让Web服务器能将一些资料,存放于客户端(用户的电脑)之中。

比如,当通过验证,成功登录网站后,在“网页一”的php脚本中,会把这个用户有关的信息,设置到客户端电脑的cookie中,当再次访问同一个网站中的其他脚本时,就会自动携带Cookie中的数据一起访问,在服务器中的每个脚本中都可以接受cookie中的数据,不需要每访问一个页面就重新输入一次登录者的信息。

操作流程

1.向客户端的电脑中设置cookie

setcookie放在html标签前面

setcookie(name, value, expire, path, domain);
<?php
$value = "my cookie value";
// send a simple cookie
setcookie("TestCookie",$value);
?>

2.在服务器端读取cookie中的内容

<?php
// Print individual cookies
echo $_COOKIE["TestCookie"];
?>

3.将多维数组应用于cookie中

在一个文件中设置cookie数组

setcookie("cookie[three]","cookiethree");
setcookie("cookie[two]","cookietwo");
setcookie("cookie[one]","cookieone");

在另一个php文件中使用for循环度取cookie数组信息

if (isset($_COOKIE["cookie"]))
{
    foreach ($_COOKIE["cookie"] as $name => $value)
    {
        echo "$name : $value <br />";
    }
}

4.删除cookie

把有效期设置为过去

// Set the expiration date to one hour ago
setcookie ("TestCookie", "", time() - 3600);

ps:使用setcookie删除cookie时,需要与当初设置cookie的时候参数一致

5.使用:为每一个用户设置相同的id

<?php
//产生参数随机id
$id=uniqid(rand(1000,9999).'_');
setcookie('id',$id,time()+3600);
echo $id;
echo $_COOKIE['id'];

session

概述

seesion技术和cookie相似,都是用来存储使用者的相关资料,但是最大的不同之处在于cookie是将资料存储在客户端中,而session则是将数据存放于服务器上。客户端只需要保存session ID即可。

操作流程

1.开启session

session_start();

​ 1)开启一个会话

​ 产生ID

<?php
    session_start();
    $_SESSION['name']='John';
    $_SESSION['email']='21423554534@qq.com';
    $_SESSION['url']='www.baidu.com';

​ 2)返回已经存在的会话

​ 根据客户端的ID查找用户在服务器端的数据

<?php
产生参数随机id
//$id=uniqid(rand(1000,9999).'_');
//setcookie('id',$id,time()+3600);
//echo $id;
session_start();
echo $_SESSION['name'];
echo "<br>";
echo $_SESSION['email'];
echo "<br>";
echo $_SESSION['url'];
echo "<br>";

ps:利用session测浏览量

<?php
session_start();
 
if(isset($_SESSION['views']))
{
    $_SESSION['views']=$_SESSION['views']+1;
}
else
{
    $_SESSION['views']=1;
}
echo "浏览量:". $_SESSION['views'];
?>

2.删除session

利用unset释放指定变量

<?php
session_start();
if(isset($_SESSION['views']))
{
    unset($_SESSION['views']);
}
?>

利用session_destroy()彻底销毁session

session_destroy() 将重置 session,您将失去所有已存储的 session 数据。

<?php
session_destroy();
?>

基于cookie和session的登录模块

cookie\index.php

<?php
header('Content-type:text/html;charset=utf-8');
if(isset($_COOKIE['username'])&& $_COOKIE['username']=='John')
{
    echo "欢迎回来!",$_COOKIE['username'];
    echo "<a href='logout.php'>注销</a>";
}
else{
    echo "未登录<a href='login.php'>点击跳转到登录界面</a>";
}

cookie\login.php

<?php
if(isset($_COOKIE['username'])&&$_COOKIE['username']==='John')
{
    exit('已成功登录');
}
if(isset($_POST['submit']))
{
    if(isset($_POST['username'])&&isset($_POST['password'])&&$_POST['username']=='John'&&$_POST['password']==='123456')
    {
        if(setcookie('username',$_POST['username']))
        {
            header('Location:index.php');
        }
        else
        {
            echo 'something wrong';
        }
    }
    else
    {
        echo"fail to login";
    }

}
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<form method="post" action="login.php">
    姓名:<input type="text" name="username">
    密码:<input type="password" name="password">
    <input type="submit" name="submit" value="登录">
</form>

</body>
</html>

cookie\logout.php

<?php
header('Content:text/html;charset=utf-8');
if(isset($_COOKIE['username'])&&$_COOKIE['username']==='John')
{
    if(setcookie('username',$_COOKIE['username'],time()-3600))
    {
        echo"注销成功";
        echo"<a href='login.php'>登录</a>";
    }
    else{
        echo 'error';
    }
}

session\index.php

<?php
session_start();
header('Content-type:text/html;charset=utf-8');
if(isset($_SESSION['username'])&& $_SESSION['username']=='John')
{
    echo "欢迎回来!",$_SESSION['username'];
    echo "<a href='logout.php'>注销</a>";
}
else{
    echo "未登录<a href='login.php'>点击跳转到登录界面</a>";
}

session\login.php

<?php
session_start();
if(isset($_SESSION['username'])&&$_SESSION['username']==='John')
{
    exit('已成功登录');

}
if(isset($_POST['submit']))
{
    if(isset($_POST['username'])&&isset($_POST['password'])&&$_POST['username']=='John'&&$_POST['password']==='123456')
    {
        $_SESSION['username']=$_POST['username'];
        header('Location:index.php');
    }
    else
    {
        echo"fail to login";
    }

}
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<form method="post" action="login.php">
    姓名:<input type="text" name="username">
    密码:<input type="password" name="password">
    <input type="submit" name="submit" value="登录">
</form>

</body>
</html>

session\logout.php

<?php
session_start();
header('Content:text/html;charset=utf-8');
if(isset($_SESSION['username'])&&$_SESSION['username']==='John') {
    session_unset();
    session_destroy();
    setcookie(session_name(),'',time()-3600,'/');
    echo "注销成功!<a href='login.php'>登录</a>";
}
    else{
        echo 'error';
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值