查看: 1164|回复: 17
|
PHP 登录和登出
[复制链接]
|
|
我在自己试做一个网页,login page是有连接database的,成功进去后就是main menu了,可是我在logout后(会回去login page),我按浏览器左上角倒回键可以直接进回menu了,完全不用password...我在网上找了好久关于clear session弄了好久都没成功...
login.php
<html><head><title>Password test</title>
</head><body><h1 align="center"><u>Authorize Test</u></h1><center>
<?php
$db="miniproject";
$link = mysql_connect('localhost','root','');
if (! $link)
die(mysql_error());
mysql_select_db('miniproject',$link) or die("Select Error: ".mysql_error());
$name=$_POST['myusername'];
$pass=$_POST['mypassword'];
$sql="SELECT * FROM check_login WHERE name = '$name' and pass = '$pass' ";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1)
{
session_start();
$_SESSION['name'] = $name;
$_SESSION['pass'] = $pass;
header("location: main_menu.php");
}
else
{
echo "Wrong Username or Password";
echo ".<br>";
echo "<a href='login.php'>Click here to back to menu</a>";
}
?>
logut.php
<?php
session_start();
session_destroy();
//echo "<a href ='login.php'>Click here to back to main menu</a>";
header('location: login.php');
exit;
?>
以上是我的代码,哪里出错误吗?其实我还想做好像cari forum那样的如果登陆5次失败要等上一段时间才可以再登陆...不过首先还是先要麻烦各位大大帮我看看这段代码哪里出了问题..谢谢大家..
|
|
|
|
|
|
|
|
发表于 24-9-2013 03:57 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 24-9-2013 04:29 PM
|
显示全部楼层
Mr.[N] 发表于 24-9-2013 03:57 PM 
http://stackoverflow.com/questions/3948230/best-way-to-completely-destroy-a-session-even-if-the-brow ...
没看过,我是看看..还是我还可以在login page 放一些指令如果按back key就出error,那样行的通吗?
|
|
|
|
|
|
|
|
发表于 24-9-2013 04:43 PM
|
显示全部楼层
shern91 发表于 24-9-2013 04:29 PM 
没看过,我是看看..还是我还可以在login page 放一些指令如果按back key就出error,那样行的通吗?
session_destroy();$cookieParams = session_get_cookie_params();setcookie(session_name(), '', 0, $cookieParams['path'], $cookieParams['domain'], $cookieParams['secure'], $cookieParams['httponly']);unset($_SESSION);
这样就能 logout+ clear cookies 了, 至于 Back button error page.. 你得另谋高人了 
|
|
|
|
|
|
|
|

楼主 |
发表于 24-9-2013 06:12 PM
|
显示全部楼层
Mr.[N] 发表于 24-9-2013 04:43 PM 
session_destroy();$cookieParams = session_get_cook ...
谢谢你的代码..我等下试试看..吃饭先..哈哈..
|
|
|
|
|
|
|
|
发表于 25-9-2013 11:17 AM
|
显示全部楼层
要登入失败5次就不能再登入的话有很多种方法,但如果你使用SESSION来记录的,你的 session_destroy 就将全部记录删除了哦
public function logout(){
setcookie('user_token', '', time()-604800, '/', '');
setcookie('user_id', '', time()-604800, '/', '');
setcookie('user_name', '', time()-604800, '/', '');
setcookie('user_avatar', '', time()-604800, '/', '');
setcookie('user_logincount', time()-604800, '/', '');
unset($_SESSION['user_token']);
unset($_SESSION['user_id']);
unset($_SESSION['user_name']);
unset($_SESSION['user_avatar']);
unset($_SESSION['user_logincount');
}
这是我最近做的,你看看适合用吗 |
|
|
|
|
|
|
|
发表于 25-9-2013 11:32 AM
|
显示全部楼层
想到的记录登入失败的好的方法应该是记录ip和时间在db,然后在那拿出来计算,如果用session的话关闭浏览器再开就可以了,如果用cookie的话clear cache也就可以再登入了。 |
|
|
|
|
|
|
|
发表于 25-9-2013 02:23 PM
|
显示全部楼层
是不是你的menu那里没有validate login? |
|
|
|
|
|
|
|

楼主 |
发表于 25-9-2013 10:58 PM
|
显示全部楼层
hui_wooi 发表于 25-9-2013 02:23 PM 
是不是你的menu那里没有validate login?
我menu那边是做一个table进username 和 password会跟database测试看对不对的。我那个login.php就是测试login的代码了....可是就是解决不到按backkey时直接进menu的漏洞,等于不secure了...
|
|
|
|
|
|
|
|
发表于 26-9-2013 09:48 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 26-9-2013 12:54 PM
|
显示全部楼层
shern91 发表于 25-9-2013 10:58 PM 
我menu那边是做一个table进username 和 password会跟database测试看对不对的。我那个login.php就是测试lo ...
每一页用session做判断。。。如果session 无效,redirect回login page.当然前提是当user login 时,你就要弄一个session 出来。。。
|
|
|
|
|
|
|
|

楼主 |
发表于 26-9-2013 04:53 PM
|
显示全部楼层
hui_wooi 发表于 26-9-2013 09:48 AM 
你menu的source code呢?
login进menu后我好像做到很简单,用HTML design吧了..
|
|
|
|
|
|
|
|

楼主 |
发表于 26-9-2013 04:55 PM
|
显示全部楼层
doktorkoo 发表于 26-9-2013 12:54 PM 
每一页用session做判断。。。如果session 无效,redirect回login page.当然前提是当user login 时,你就要 ...
其实我不大会用session,所以之前做时没想到...过后交了功课后才发现漏洞.... 
|
|
|
|
|
|
|
|

楼主 |
发表于 26-9-2013 09:00 PM
|
显示全部楼层
终于解决了...用了这段代码,不过我不是很懂,如果有哪位会的话稍微解释一下...谢谢各位大大
<?php
//Start session
session_start();
//Check whether the session variable SESS_MEMBER_ID is present or not
if(!isset($_SESSION['SESS_FIRST_NAME']) || (trim($_SESSION['SESS_FIRST_NAME']) == '')) {
header("location: index_new.php");
exit();
}
?> |
|
|
|
|
|
|
|
发表于 27-9-2013 09:12 AM
|
显示全部楼层
去php官网看看什么是isset,什么是trim。 |
|
|
|
|
|
|
|

楼主 |
发表于 27-9-2013 03:47 PM
|
显示全部楼层
hui_wooi 发表于 27-9-2013 09:12 AM 
去php官网看看什么是isset,什么是trim。
意思是google吗?还是php本身有官网的?
|
|
|
|
|
|
|
|
发表于 30-9-2013 09:11 AM
|
显示全部楼层
那你就试试google php official websie吧。 |
|
|
|
|
|
|
|
发表于 30-9-2013 09:30 AM
|
显示全部楼层
php。net/isset
php。net/trim
就可以了 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|