ホームページ >バックエンド開発 >PHPの問題 >PHPでログインせずに7日間を達成する方法

PHPでログインせずに7日間を達成する方法

藏色散人
藏色散人オリジナル
2022-10-25 11:13:281826ブラウズ

php で 7 日間ログイン不要を実装する方法: 1. ユーザーが 7 日間ログイン不要を選択するためのボタンをフロントエンドに作成します; 2. バックエンドでユーザーの ID をクエリします。ユーザーが送信したユーザー名とパスワードに基づく; 3. ユーザー ID を cooike に保存; 4. 有効期限を 7 日間に設定します。

PHPでログインせずに7日間を達成する方法

このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、Dell G3 コンピューター。

php 7 日間ログインを避けるにはどうすればよいですか?

Cookie のスプーフィングを防ぐために、PHP に 7 日間ログイン不要の機能を実装します

1. ログイン不要のアイデア

ユーザー7 日間ログイン不要ボタンを選択すると、バックエンドはユーザーが送信したユーザー名とパスワードに基づいてユーザー ID を照会し、ユーザー ID を cooike に保存し、有効期限を 7 日間に設定します。 Cookie情報がクリアされていない場合(異常終了時)、バックグラウンドでログインを支援します。実際には Cookie を使用して実装されます。

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でログインせずに7日間を達成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。