您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“php如何實(shí)現(xiàn)七天免登錄”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
php實(shí)現(xiàn)七天免登錄的方法:1、在前端創(chuàng)建一個(gè)用戶選擇七天免登錄的按鈕;2、在后端中,根據(jù)用戶提交的用戶名和密碼查詢到用戶的id;3、將用戶id存入cooike中;4、設(shè)置七天的過期時(shí)間即可。
php 怎么實(shí)現(xiàn)七天免登錄?
php中實(shí)現(xiàn)7天免登錄功能,防止cookie欺騙
1、免登錄思路
用戶選擇七天免登錄按鈕,后端根據(jù)用戶提交的用戶名和密碼查詢到用戶的id將用戶id存入cooike中并設(shè)置七天的過期時(shí)間。在不清除cookie信息(非正常退出的時(shí)候),后臺幫助用戶登錄。實(shí)際就是利用cooki實(shí)現(xiàn)。
2、驗(yàn)證登錄文件:checkLogin.php
<?php
header('content-type:text/html;charset=utf-8');
require './config.php';
$username = $_POST['uname'];
$password = md5($_POST['pwd']);
$islogin = $_POST['islogin'];
$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){
//驗(yàn)證成功
clearCookie();
if($islogin==1){
//記住密碼
setcookie("username",$res['username'],strtotime('+7 days'));
$token = settoken($res['username'],$res['password'],$res['id']);
setcookie("token",$token,strtotime('+7 days'));
}else{
// 無記住密碼
setcookie("username",$res['username']);
$token = settoken($res['username'],$res['password'],$res['id']);
setcookie("token",$token);
}
exit("
<script>
alert('登錄成功!');
location.href ='index.php';
</script>
");
}else{
//驗(yàn)證失敗
exit("
<script>
alert('用戶名或密碼有誤!');
location.href ='login.php';
</script>
");
}
//清除cookie
function clearCookie(){
setcookie("username",'',time()-1800);
setcookie("token",'',time()-1800);
}
//設(shè)置token
function settoken($username,$password,$id)
{
$salk = "czx";
$token = md5($salk.$username.$password)."*".$id;
return $token;
}
3、數(shù)據(jù)庫配置文件:config.php
<?php
//主機(jī)地址
define("DB_HOST","localhost");
//數(shù)據(jù)庫用戶名
define("DB_USER","root");
//數(shù)據(jù)庫密碼
define("DB_PASSWORD","root123");
// 數(shù)據(jù)庫型號
define("DB_TYPE","mysql");
// 數(shù)據(jù)庫名稱
define("DB_NAME","my_user");
//數(shù)據(jù)庫編碼
define('DB_CHARSET', 'utf8');
//數(shù)據(jù)庫端口號
define('DB_PORT', '3306');
//定義PDO的DSN,數(shù)據(jù)源名,包括主機(jī)名,端口號和數(shù)據(jù)庫名稱。
define('DSN', DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);
try{
//連接數(shù)據(jù)款
$pdo = new PDO(DSN,DB_USER,DB_PASSWORD);
} catch(PDOException $e){
//捕捉特定于數(shù)據(jù)庫信息的PDOEXCEPTION 異常
echo $e->getMessage();
} catch(Throwable $e){
//捕捉擁有Throwable接口的錯(cuò)誤或者其他異常
echo $e->getMessage();
}
4、登錄頁面文件 : login.php
<?php
if($_GET['act'] == 'out'){
setcookie("username",'',time()-1800);
setcookie("token",'',time()-1800);
}
$token = $_COOKIE['token'];
$username = $_COOKIE['username'];
if(!empty($username) &&!empty($token)&& ($_GET['act'] != 'out')){
exit("
<script>
alert('用戶已登錄,請直接訪問!');
location.href ='index.php';
</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;
}
h4 {
text-align: center;
}
.contater > .submit >input{
margin: 15px 140px;
font-size: 1.5rem;
}
</style>
<body>
<h4 >登錄</h4>
<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['token'];
$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['username'].$result['password']);
if($token_res != $token_arr[0]){
exit("
<script>
alert('請先登錄');
loction.href ='login.php';
</script>
");
}
}else{
exit("
<script>
alert('請您先登錄');
location.href='login.php';
</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;
}
h2 {
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>
<h2>陶轉(zhuǎn)轉(zhuǎn)首頁</h2>
<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['username'];?></span>
<a href="./login.php?act=out">退出</a>
</div>
</div>
</body>
</html
“php如何實(shí)現(xiàn)七天免登錄”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。