佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1164|回复: 17

PHP 登录和登出

[复制链接]
发表于 24-9-2013 12:06 AM | 显示全部楼层 |阅读模式
我在自己试做一个网页,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次失败要等上一段时间才可以再登陆...不过首先还是先要麻烦各位大大帮我看看这段代码哪里出了问题..谢谢大家..



回复

使用道具 举报


ADVERTISEMENT

发表于 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');
}

这是我最近做的,你看看适合用吗
回复

使用道具 举报

Follow Us
发表于 25-9-2013 11:32 AM | 显示全部楼层
想到的记录登入失败的好的方法应该是记录ip和时间在db,然后在那拿出来计算,如果用session的话关闭浏览器再开就可以了,如果用cookie的话clear cache也就可以再登入了。
回复

使用道具 举报

发表于 25-9-2013 02:23 PM | 显示全部楼层
是不是你的menu那里没有validate login?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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 | 显示全部楼层
你menu的source code呢?
回复

使用道具 举报

发表于 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本身有官网的?
回复

使用道具 举报


ADVERTISEMENT

发表于 30-9-2013 09:11 AM | 显示全部楼层
那你就试试google php official websie吧。
回复

使用道具 举报

发表于 30-9-2013 09:30 AM | 显示全部楼层
php。net/isset

php。net/trim

就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 17-9-2025 05:32 PM , Processed in 0.120428 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表