PHP会话维持是如何实现的(session,cookie)

5 篇文章 0 订阅

会话维持

什么是会话?一位用户从访问网站的第一个网页开始直到离开网站,就可以称为一个会话。

Cookie

存储在浏览器客户端,当用户访问网站时,Cookie随着请求一起发给服务器。Cookie一般用于在客户端存储数据以及追踪识别用户。

  1. 创建Cookie
setcookie($name,$value,$expire=0[,$path][,$domain])
  • $name:Cookie变量名
  • $value:Cookie变量值
  • $expire:Cookie过期时间,通常用time()+秒数来设置过期时间
  • $path:设置Cookie在服务器的哪些路径可以用,默认只对当前目录有效
  • $domain:设置域
  1. 读取Cookie内容
    在PHP中,全局数组$_Cookie中保存了Cookie的变量
例如:echo $Cookie['username']
  1. 删除Cookie
    一般有两种删除方法,一是通过设置Cookie的过期时间为当前时间-1秒,二是用户手动在浏览器删除Cookie
测试代码:
<?php
if($_COOKIE['isloged']=="True" and $_COOKIE['username']<>null){//首先判断有没有已经成功登陆的标记
    echo"<h1>欢迎</h1>";
    print_r($_COOKIE);
    exit;//如果已经登陆过,那么结束脚本,不再执行下面代码
}
if($_COOKIE['username']==0){//判断是否有用户名的值
    echo"未登陆"; 
}
?>
<!-- 登陆部分, -->
<title>表单登陆</title>
<meta charset="utf-8">
    <table border=0>
        <tr >
            <td align=right>
                请输入用户名:<br>
                请输入密码:<br>
                性别:<br>
                出生日期:<br>
                爱好:<br>
                简介:<br><br><br><br>
            </td>
            <td align=left>
            <!-- action是当前的网页,传输是POST方式 -->
                <form action="index.php" method="POST">
                    <input type="text" name = "username"><br>
                    <input type="password" name = "pwd" value="123456" ><br>
                    <input type="radio" name="sex" value="female"><input type="radio" name="sex" value="male" checked><br>
                    <select name="y">
                        <option value="1970">1970</option>
                    </select><select name="m">
                        <option value="1">1</option>
                    </select><select name="d">
                        <option value="19">19</option>
                    </select><br>
                    <input type="checkbox" name="book" value="读书">读书
                    <input type="checkbox" name="climb" value="登山">登山
                    <input type="checkbox" name="music" value="音乐">音乐
                    <br>
                    <textarea name="brief" >husiudh</textarea>
                    <br>
                        <input type="submit">
                        <input type="reset">
                    </form>
                </td>
    </table>

<?php
    if(count($_POST)==0) exit;//判断有没有表单提交信息,如果发现POST没有内容,那么退出脚本。
    echo "<hr>你输入的数据如下<br>";
    print_r( $_POST);
    print_r($_COOKIE);
    echo"<hr>";

    if($_POST['pwd']<>"123456" ){//判断密码是不是正确的
        echo"用户名或者密码错误";
    }else {//如果密码正确,那么设置Cookie,并且跳转页面到当前页面(在这个例子相当于刷新的功能)
        setcookie('username',$_POST['username'],time()+3660);
        setcookie('isloged','True',time()+3600);
        echo '<script>window.location = ".";</script>';
    }  
?>

Session

存储在服务器,PHP为每一个会话创建一个唯一的SessionID,SessionID可以在用户访问的页面之间传递,以识别会话,保存在一个全局数组$_SESSION中。当用户离开网站时,Session自动销毁。

  1. 设置Session
  • session.save_path="/php/session":PHP使用文件来保存Session,该设置指定Session的保存路径。
  • session.use_cookie=1:设置是否使用Cookie来传递SessionID
  • session.use_only_cookie=1:设置是否只使用Cookie来传递SessionID,而不使用URL传递
  • session.auto_start=1:设置用户访问网站时自动启用session,如果为0,则需要在用户访问的每一个网页中调用 session_start()函数来启动Session。
测试代码
<?php
session_start();//开启session
if($_SESSION['isloged']=="True" and $_SESSION['username']<>null){//首先判断有没有已经成功登陆的标记
    echo"<h1>欢迎</h1>";
    print_r($_SESSION);
    exit;//如果已经登陆过,那么结束脚本,不再执行下面代码
}
if($_SESSION['username']==0){//判断是否有用户名的值
    echo"未登陆"; 
}
?>
<!-- 登陆部分, -->
<title>表单登陆</title>
<meta charset="utf-8">
    <table border=0>
        <tr >
            <td align=right>
                请输入用户名:<br>
                请输入密码:<br>
                性别:<br>
                出生日期:<br>
                爱好:<br>
                简介:<br><br><br><br>
            </td>
            <td align=left>
            <!-- action是当前的网页,传输是POST方式 -->
                <form action="index.php" method="POST">
                    <input type="text" name = "username"><br>
                    <input type="password" name = "pwd" value="123456" ><br>
                    <input type="radio" name="sex" value="female"><input type="radio" name="sex" value="male" checked><br>
                    <select name="y">
                        <option value="1970">1970</option>
                    </select><select name="m">
                        <option value="1">1</option>
                    </select><select name="d">
                        <option value="19">19</option>
                    </select><br>
                    <input type="checkbox" name="book" value="读书">读书
                    <input type="checkbox" name="climb" value="登山">登山
                    <input type="checkbox" name="music" value="音乐">音乐
                    <br>
                    <textarea name="brief" >husiudh</textarea>
                    <br>
                        <input type="submit">
                        <input type="reset">
                    </form>
                </td>
    </table>

<?php
    if(count($_POST)==0) exit;//判断有没有表单提交信息
    echo "<hr>你输入的数据如下<br>";
    print_r( $_POST);
    print_r($_SESSION);
    echo"<hr>";

    if($_POST['pwd']<>"123456" ){//判断密码是不是正确的
        echo"用户名或者密码错误";
    }else {//如果密码正确,那么设置SE$_SESSION,并且跳转页面到当前页面(在这个例子相当于刷新的功能)
        $_SESSION['username']=$_POST['username'];
        $_SESSION['isloged']="True";
        echo '<script>window.location = ".";</script>';
    }  
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值