请教用PHP实现自动登录问题。 就是像这个论坛一样 登录时选中“两周内自动登录”,下次打开这个页面就自动登录,两周后就自动清空cookies请问这个怎么实现呀?望能提供相关代码。谢谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 登录成功时获取当前电脑的IP,计算出两周后的时间戳,例如存入表userlog用户ID,用户IP,当前时间,两周后时间.在你的电脑每次打开网页时先获得你的IP,判断出表中是否有你的IP,如果有再判断出当前的时间是否大于上次的登录时间和小于两周后的时间,如果是不用登录,否则需要登录!假如过了两周后,用户又勾选两周不用登录,则更新当前时间和两周后时间,条件是用户ID php实现cookie登录,php登录 cookie自动登录<?phpinclude_once ("sql_connect.php");include_once ("my_msg.php"); ?> <html> <head> <meta http- equiv="content-type" content="text/html" charset=utf-8 /> <title& gt;会员功能表</title> < /head> <body bgcolor = "white" text="black" link="blue" vlink="purple" alink="red"><?php if(isset($_COOKIE['cookie_chk'])){ if($_COOKIE['cookie_chk'] !="logined"){ my_msg("登录失败,请重新登录!","login.php"); } }else { my_msg("登录失败,请重新登录!","login.php"); } ?> <h1 align="center">欢迎<?php echo $_COOKIE['cookie_id']; ?>进入会员区<br> <p>会员主功能表</h1>< /p></p><h3 align="center"><a href="pass.html">修改密码</a></h3> <h3 align="center"><a href="login.php"& gt;注销</h3> </body> </html>下面来看php登录 cookie自动登录的php处理代码<?phpinclude_once("sql_connect.php"); include_once("my_msg.php"); ?> <?php if($_POST['id']=='' or $_POST['passwd']==''){ my_msg("字段不能为空!","login.php");} $sqlstr ="select * from member where id='".$_POST['id']."' and passwd='".$_POST['passwd']."' and status =1";$result = mysql_query($sqlstr,$link); $row = mysql_fetch_array($result,MYSQL_BOTH);if(mysql_num_rows($result)==1 && $row["rank"]==100){setcookie("cookie_chk","adm_logined"); setcookie("cookie_id",$_POST['id']); my_header("adm.php");}elseif (mysql_num_rows($result)==1 && $row["rank"]==1){ setcookie("cookie_chk","logined"); setcookie("cookie_id",$_POST['id']); my_header("main.php"); }else { my_msg("登录失败,请重新等录!","login.php");} mysql_free_result($result);mysql_close($link); ?> 再参考:小弟又來獻醜了,這次獻上利用DW for PHP來實現會員能記住帳號且自動登入的作法,本人也不太建議利用Cookies來做自動登入的行為,但一定很多人想知道如何利用DW去設計網站,讓網站也有這樣的功能,這次教學純屬土法煉鋼的方式,並不是屬於正規的方式去做,只利用一些邏輯觀念下去判斷並達到此效果,會員登入與登出的製作方式,請先參閱茶米的大作,挑戰DW8 for PHP第八章,並完成登入/登出的狀態判斷與記住會員資料的設計,一定要確實完成喔。接下來在會員登入的程式碼下方加入二段程式碼:<?php/*....恕略....*/ header("Location:".$MM_redirectLoginSuccess); } else {/*.....在這裡加入清除Cookies的語法......*/ setcookie("remuser", '', time()); setcookie("rempass", '', time()); header("Location:".$MM_redirectLoginFailed); }}/*....在這裡加入一個判斷....*/if ($totalRows_useradmin == 0){ if (isset($HTTP_COOKIE_VARS['remuser'])) { $_SESSION['MM_Username'] = $HTTP_COOKIE_VARS['remuser']; header("Location:index.php"); }}?>加入上述那段程式碼的用意是去判斷useradmin資料集若等於空值的話,則去提取Cookies的資料,如果有紀錄$HTTP_COOKIE_VARS['remuser']的Cookies資料,就判斷$_SESSION['MM_Username']是否等於$HTTP_COOKIE_VARS['remuser'];所提取的值,條件成立後就重新導向回首頁。那為了要防止會員帳號與密碼輸入錯誤時,Cookies也會記錄到錯誤的帳號與密碼,導致一直不停的循環index.php這個頁面,所以在登入錯誤時要導向哪的程式碼前面加上刪除Cookies的語法,這樣就不會記錄到錯誤的帳號與密碼了。這樣就完成利用Cookies去達到自動登入的效果了。至於登出呢?因為你所記錄Cookies的值還是存在於USER的電腦中,所以當USER按下登出後,因為加了上述那段提取Cookies的程式碼,所以USER登出後useradmin資料集會等於空值,因此會提取Cookies而自動導向自動登入,所以你必須在登出的程式片段中加入清除Cookies紀錄的語法,方法如下:<?php/*.....恕略......*/if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']);/*.....在這裡加入清除Cookies的語法......*/ setcookie("remuser", '', time()); setcookie("rempass", '', time()); $logoutGoTo = "logout.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; }}?>加入上述刪除Cookies的語法後,只要USER按下登出時,就會一起刪除Cookies的紀錄,達到完全登出的效果了。以上方式強烈不建議使用在會影響個資的網頁上,畢竟它只是一個方便性,對於網站的安全性只會減少而不會增加,如要使用此效果,請考慮安全性的問題。 通常做法:Cookie安全也考虑一下 这个大概的意思是对的,但不能用 IP,这个太容易伪造了。学习一下 UCHOME 的做法吧,它是在服务器上计算出一个特殊的编码,作为一个 cookie 派发给客户端浏览器(有效期可以设置为两周),两周内这个浏览器访问服务器时,都会把这个编码提交上来,服务器从中可以解算出 user id,并据此视为该用户处于合法登录状态。因为编码中包含了 secret key 的成分,所以无法在客户端伪造。————————————————————————————————基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :) 内容处理 怎么学好PHP 急求php留言板代码 万分感谢 条件判断 统计各个情况的和 怎样让FTP上传文件的权限自动变成777? curl的结果显示有问题 $PATH_INFO和$PATH_SELF? php 打印等宽度字符? PHP新手,求教大神!! 请教 验证用户是否登录 哪种方式好 请问高手php中的数组如何以"2"这个符串来做key? 如何获取这样的数组中的一个值?
例如存入表userlog用户ID,用户IP,当前时间,两周后时间.在你的电脑每次打开网页时先获得你的IP,判断出表中是否有你的IP,如果有再判断出当前的时间是否大于上次的登录时间和小于两周后的时间,如果是不用登录,否则需要登录!假如过了两周后,用户又勾选两周不用登录,则更新当前时间和两周后时间,条件是用户ID
<?php
include_once ("sql_connect.php");
include_once ("my_msg.php");
?>
<html>
<head>
<meta http- equiv="content-type" content="text/html" charset=utf-8 />
<title& gt;会员功能表</title> < /head> <body bgcolor = "white" text="black" link="blue" vlink="purple" alink="red">
<?php
if(isset($_COOKIE['cookie_chk'])){
if($_COOKIE['cookie_chk'] !="logined"){
my_msg("登录失败,请重新登录!","login.php"); }
}else {
my_msg("登录失败,请重新登录!","login.php"); }
?>
<h1 align="center">欢迎<?php echo $_COOKIE['cookie_id']; ?>进入会员区<br>
<p>会员主功能表</h1>< /p></p>
<h3 align="center"><a href="pass.html">修改密码</a></h3>
<h3 align="center"><a href="login.php"& gt;注销</h3>
</body>
</html>
下面来看php登录 cookie自动登录的php处理代码
<?php
include_once("sql_connect.php");
include_once("my_msg.php");
?>
<?php if($_POST['id']=='' or $_POST['passwd']==''){
my_msg("字段不能为空!","login.php");
}
$sqlstr ="select * from member where id='".$_POST['id']."' and passwd='".$_POST['passwd']."' and status =1";
$result = mysql_query($sqlstr,$link);
$row = mysql_fetch_array($result,MYSQL_BOTH);
if(mysql_num_rows($result)==1 && $row["rank"]==100){
setcookie("cookie_chk","adm_logined");
setcookie("cookie_id",$_POST['id']);
my_header("adm.php");
}elseif (
mysql_num_rows($result)==1 && $row["rank"]==1){
setcookie("cookie_chk","logined");
setcookie("cookie_id",$_POST['id']);
my_header("main.php");
}else {
my_msg("登录失败,请重新等录!","login.php");
}
mysql_free_result($result);
mysql_close($link);
?>
小弟又來獻醜了,這次獻上利用DW for PHP來實現會員能記住帳號且自動登入的作法,本人也不太建議利用Cookies來做自動登入的行為,但一定很多人想知道如何利用DW去設計網站,讓網站也有這樣的功能,這次教學純屬土法煉鋼的方式,並不是屬於正規的方式去做,只利用一些邏輯觀念下去判斷並達到此效果,會員登入與登出的製作方式,請先參閱茶米的大作,挑戰DW8 for PHP第八章,並完成登入/登出的狀態判斷與記住會員資料的設計,一定要確實完成喔。接下來在會員登入的程式碼下方加入二段程式碼:
<?php
/*....恕略....*/
header("Location:".$MM_redirectLoginSuccess);
}
else {
/*.....在這裡加入清除Cookies的語法......*/
setcookie("remuser", '', time());
setcookie("rempass", '', time());
header("Location:".$MM_redirectLoginFailed);
}
}/*....在這裡加入一個判斷....*/
if ($totalRows_useradmin == 0){
if (isset($HTTP_COOKIE_VARS['remuser'])) {
$_SESSION['MM_Username'] = $HTTP_COOKIE_VARS['remuser'];
header("Location:index.php");
}
}
?>
加入上述那段程式碼的用意是去判斷useradmin資料集若等於空值的話,則去提取Cookies的資料,如果有紀錄$HTTP_COOKIE_VARS['remuser']的Cookies資料,就判斷$_SESSION['MM_Username']是否等於$HTTP_COOKIE_VARS['remuser'];所提取的值,條件成立後就重新導向回首頁。
那為了要防止會員帳號與密碼輸入錯誤時,Cookies也會記錄到錯誤的帳號與密碼,導致一直不停的循環index.php這個頁面,所以在登入錯誤時要導向哪的程式碼前面加上刪除Cookies的語法,這樣就不會記錄到錯誤的帳號與密碼了。這樣就完成利用Cookies去達到自動登入的效果了。至於登出呢?因為你所記錄Cookies的值還是存在於USER的電腦中,所以當USER按下登出後,因為加了上述那段提取Cookies的程式碼,所以USER登出後useradmin資料集會等於空值,因此會提取Cookies而自動導向自動登入,所以你必須在登出的程式片段中加入清除Cookies紀錄的語法,方法如下:
<?php
/*.....恕略......*/if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){
//to fully log out a visitor we need to clear the session varialbles
$_SESSION['MM_Username'] = NULL;
$_SESSION['MM_UserGroup'] = NULL;
$_SESSION['PrevUrl'] = NULL;
unset($_SESSION['MM_Username']);
unset($_SESSION['MM_UserGroup']);
unset($_SESSION['PrevUrl']);/*.....在這裡加入清除Cookies的語法......*/
setcookie("remuser", '', time());
setcookie("rempass", '', time());
$logoutGoTo = "logout.php";
if ($logoutGoTo) {
header("Location: $logoutGoTo");
exit;
}
}
?>
加入上述刪除Cookies的語法後,只要USER按下登出時,就會一起刪除Cookies的紀錄,達到完全登出的效果了。以上方式強烈不建議使用在會影響個資的網頁上,畢竟它只是一個方便性,對於網站的安全性只會減少而不會增加,如要使用此效果,請考慮安全性的問題。
安全也考虑一下
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)