首頁 > 後端開發 > PHP問題 > php 怎麼實現七天免登入

php 怎麼實現七天免登入

藏色散人
發布: 2023-03-17 09:16:02
原創
1834 人瀏覽過

php實現七天免登入的方法:1.在前端建立一個使用者選擇七天免登入的按鈕;2、在後端中,根據使用者提交的使用者名稱和密碼查詢到使用者的id;3、將用戶id存入cooike中;4、設定七天的過期時間即可。

php 怎麼實現七天免登入

本教學操作環境:windows7系統、PHP8.1版、Dell G3電腦。

php 怎麼實現七天免登入?

php中實現7天免登入功能,防止cookie欺騙

1、免登入想法

        使用者選擇七天免登入按鈕,後端根據用戶提交的用戶名和密碼查詢到用戶的id將用戶id存入cooike中並設定七天的過期時間。在不清除cookie資訊(非正常登出的時候),後台幫助使用者登入。實際就是利用cooki來實現。

2、驗證登入檔:checkLogin.php

<?php
header(&#39;content-type:text/html;charset=utf-8&#39;);
require &#39;./config.php&#39;;
$username = $_POST[&#39;uname&#39;];
$password = md5($_POST[&#39;pwd&#39;]);
$islogin = $_POST[&#39;islogin&#39;];
$sql = "SELECT * FROM `mu_user` WHERE `username`=? AND `password`=? ";
$stm = $pdo -> prepare($sql);
$stm ->bindParam(1,$username);
$stm ->bindParam(2,$password);
$stm ->execute();
$res = $stm->fetch(PDO::FETCH_ASSOC);
if($stm->rowCount() == 1){
    //验证成功
    clearCookie();
    if($islogin==1){
        //记住密码
        setcookie("username",$res[&#39;username&#39;],strtotime(&#39;+7 days&#39;));
        $token = settoken($res[&#39;username&#39;],$res[&#39;password&#39;],$res[&#39;id&#39;]);
        setcookie("token",$token,strtotime(&#39;+7 days&#39;));
    }else{
        // 无记住密码
        setcookie("username",$res[&#39;username&#39;]);
        $token = settoken($res[&#39;username&#39;],$res[&#39;password&#39;],$res[&#39;id&#39;]);
        setcookie("token",$token);
    }
    exit("
        <script>
            alert(&#39;登录成功!&#39;);
            location.href =&#39;index.php&#39;;
        </script>
    ");
}else{
    //验证失败
    exit("
        <script>
            alert(&#39;用户名或密码有误!&#39;);
            location.href =&#39;login.php&#39;;
        </script>
    ");
}
//清除cookie
function clearCookie(){
    setcookie("username",&#39;&#39;,time()-1800);
    setcookie("token",&#39;&#39;,time()-1800);
}
//设置token
function settoken($username,$password,$id)
{
    $salk = "czx";
    $token = md5($salk.$username.$password)."*".$id;
    return $token;
}
登入後複製

3、資料庫設定檔:config.php

<?php
//主机地址
define("DB_HOST","localhost");
//数据库用户名
define("DB_USER","root");
//数据库密码
define("DB_PASSWORD","root123");
// 数据库型号
define("DB_TYPE","mysql");
// 数据库名称
define("DB_NAME","my_user");
//数据库编码
define(&#39;DB_CHARSET&#39;, &#39;utf8&#39;);
//数据库端口号
define(&#39;DB_PORT&#39;, &#39;3306&#39;);
//定义PDO的DSN,数据源名,包括主机名,端口号和数据库名称。
define(&#39;DSN&#39;, DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);
try{
    //连接数据款
    $pdo = new PDO(DSN,DB_USER,DB_PASSWORD);
} catch(PDOException $e){
     //捕捉特定于数据库信息的PDOEXCEPTION 异常
    echo  $e->getMessage();
} catch(Throwable $e){
    //捕捉拥有Throwable接口的错误或者其他异常
    echo $e->getMessage();
}
登入後複製

#4、登入頁面檔案: login.php

<?php
    if($_GET[&#39;act&#39;] == &#39;out&#39;){
        setcookie("username",&#39;&#39;,time()-1800);
        setcookie("token",&#39;&#39;,time()-1800);
    }
    $token = $_COOKIE[&#39;token&#39;];
    $username = $_COOKIE[&#39;username&#39;];
    if(!empty($username) &&!empty($token)&& ($_GET[&#39;act&#39;] != &#39;out&#39;)){
        exit("
            <script>
                alert(&#39;用户已登录,请直接访问!&#39;);
                location.href =&#39;index.php&#39;;
            </script>
        ");
    }
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录</title>
</head>
<style>
    *{
        margin: 0px;
        padding: 0;
    }
    .contater {
        border: 1px solid #000;
        width: 300px;
        display: flex;
        flex-direction: column;
        margin: auto;
    }
    .contater>div {
        margin-top: 20px;
    }
    h3 {
        text-align: center;
    }
    .contater > .submit >input{
        margin: 15px 140px;
        font-size: 1.5rem;
    }
</style>
<body>
<h3 >登录</h3>
    <form action="checkLogin.php" method="post">
        <div>
            <div>
                <span>用户名:</span>
                <input type="text" name="uname">
            </div>
            <div>
                <span>密   码:</span>
                <input type="password" name="pwd">
            </div>
            <div>
                <input type="radio"" name="islogin" value="1">
                <span>记住密码</span>
            </div>
            <div>
                <input  type="submit" value="登录">
            </div>
        </div>
    </form>
</body>
</html>
登入後複製

5、首頁檔案:index.php

<?php
    $token = $_COOKIE[&#39;token&#39;];
    $token_arr = explode("*",$token);
    $uid = end($token_arr);//获取用户id
    require "./config.php";
    $sql = "SELECT * FROM `mu_user` WHERE `id`=?";
    $stm = $pdo ->prepare($sql);
    $stm ->bindParam(1,$uid);
    $stm ->execute();
    $result =$stm->fetch(PDO::FETCH_ASSOC);
    if($stm->rowCount()==1){
        $salk = "czx";
        $token_res = md5($salk.$result[&#39;username&#39;].$result[&#39;password&#39;]);
        if($token_res != $token_arr[0]){
            exit("
                <script>
                alert(&#39;请先登录&#39;);
                loction.href =&#39;login.php&#39;;    
                </script>            
            ");
        }
    }else{
        exit("
            <script>
                alert(&#39;请您先登录&#39;);
                location.href=&#39;login.php&#39;;
            </script>
        ");
    }
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>首页</title>
  </head>
  <style>
    * {
      margin: 0px;
      padding: 0px;
      box-sizing: border-box;
    }
    h1 {
      text-align: center;
    }
    a {
      text-decoration: none;
      font-size: 1.5rem;
      color: darkgray;
    }
    a:hover {
      background-color: lightskyblue;
      border-radius: 5%;
      /* font-size: 2rem; */
    }
    li {
        list-style-type: none;
        color: darkgray;
    }
    span {
        color: darkgray;
        font-size: 1.5rem;
        margin-right: 15px;
        color:burlywood
    }
    .top {
      /* width: 960px; */
      background-color: linen;
      display: flex;
      flex-flow: row nowrap;
      justify-content: space-between;
    }
    .top > div {
      margin: 10px 40px;
    }
    .column {
      /* width: 960px; */
      display: flex;
      flex-flow: row nowrap;
      justify-content: space-around;
    }
    .column > li {
      margin-right: 65px;
      padding: 0px 20px;
    }
  </style>
  <body>
    <h1>陶转转首页</h1>
    <div>
      <div>
        <ul>
          <li><a href="">LOGO</a></li>
          <li><a href="">首页</a></li>
          <li><a href="">分类一</a></li>
        </ul>
      </div>
      <div>
        <span>欢迎您,<?php echo $result[&#39;username&#39;];?></span>
        <a href="./login.php?act=out">退出</a>
      </div>
    </div>
  </body>
</html>
登入後複製

推薦學習:《 PHP影片教學

以上是php 怎麼實現七天免登入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板