请教用PHP实现自动登录问题。

xiexiaokang 2011-01-25 10:20:53
就是像这个论坛一样 登录时选中“两周内自动登录”,下次打开这个页面就自动登录,两周后就自动清空cookies


请问这个怎么实现呀?望能提供相关代码。谢谢啦
...全文
1437 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
浴火_凤凰 2011-01-25
  • 打赏
  • 举报
回复
就是表单的自动提交嘛
maquan 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 brilliant_fgh 的回复:]
登录成功时获取当前电脑的IP,计算出两周后的时间戳,
例如存入表userlog
用户ID,用户IP,当前时间,两周后时间.
在你的电脑每次打开网页时先获得你的IP,判断出表中是否有你的IP,如果有再判断出当前的时间是否大于上次的登录时间和小于两周后的时间,如果是不用登录,否则需要登录!
假如过了两周后,用户又勾选两周不用登录,则更新当前时间和两周后时间,条件是用户ID
[/Quote]
这个大概的意思是对的,但不能用 IP,这个太容易伪造了。

学习一下 UCHOME 的做法吧,它是在服务器上计算出一个特殊的编码,作为一个 cookie 派发给客户端浏览器(有效期可以设置为两周),两周内这个浏览器访问服务器时,都会把这个编码提交上来,服务器从中可以解算出 user id,并据此视为该用户处于合法登录状态。因为编码中包含了 secret key 的成分,所以无法在客户端伪造。


————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
君望永远 2011-01-25
  • 打赏
  • 举报
回复
通常做法:Cookie
安全也考虑一下
skyaspnet 2011-01-25
  • 打赏
  • 举报
回复
再参考:


小弟又來獻醜了,這次獻上利用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的紀錄,達到完全登出的效果了。

以上方式強烈不建議使用在會影響個資的網頁上,畢竟它只是一個方便性,對於網站的安全性只會減少而不會增加,如要使用此效果,請考慮安全性的問題。
skyaspnet 2011-01-25
  • 打赏
  • 举报
回复
php实现cookie登录,php登录 cookie自动登录
<?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);
?>
caizhenyu888 2011-01-25
  • 打赏
  • 举报
回复
cookie
brilliant_fgh 2011-01-25
  • 打赏
  • 举报
回复
登录成功时获取当前电脑的IP,计算出两周后的时间戳,
例如存入表userlog

用户ID,用户IP,当前时间,两周后时间.

在你的电脑每次打开网页时先获得你的IP,判断出表中是否有你的IP,如果有再判断出当前的时间是否大于上次的登录时间和小于两周后的时间,如果是不用登录,否则需要登录!

假如过了两周后,用户又勾选两周不用登录,则更新当前时间和两周后时间,条件是用户ID

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧