网站防止非法用户登录的session方式实现
网站都有一个防止非法用户直接登录的session方式被十分普遍地采用,并且可以将用户的登录信息保存一段时间,session方式是一种比较方便安全的登录检查方式,由于session是存放在服务器端的,所以就基本不用担心登录信息被本地用户获得,当然类似于密码之类的比较重要的信息千万不要用session保存,比较session数据其实也和cookie一样,只不过它是放在服务器端的而已。关于session有必要多讲一下,这个东西有点类似于cookie,但又有点不同,不同之处在于session是在服务器端实现,不受客户端浏览器影响,当然关闭cookie也会导致session的功能失常,但这是可以通过URL重写来克服的,即在URL末尾写入session的cookie默认表示符,php是PHPSESSID,链接写成如下形式:
http;//localhost/session.php?PHPSESSID=diysessionname
然后session_start()启动session,就会自动根据这个传过来的值作为session文件名,自己设置的话就要用到
session_id()函数,这个函数是专门用来设定session文件保存方式的文件名,不过针对大型网站,往往有多台服务器,针对同一台客户机浏览器session是不同的,这时就会用到多服务器共享session方式,这种方式就要比文件保存session方式更高级一点,采用数据库保存,需要自己重写session的处理方式。适合有一定的php基础的人用。
我写了一个用于验证用户是否登录的函数,当用户没有登录直接打开某个页面时就会直接显示未登录状态,而从登录页面跳转到新页面,在新页面就会登录状态,采用session保存登录状态,直到浏览器关闭。闲话不多说了,先来看一下我的验证用户登录状态的函数文件,主要是根据用户提交的数据和页面来判断用户是不是直接点击到管理页面还没有经过登录页面,涉及数据库的操作全部封装在SQLHelp.class.php文件中了,这里用到是检测用户名是否存在和密码是否正确这两个事项。代码如下:
<!Doctype html><html xmlns=http://www.w3.org/1999/xhtml><head><meta http-equiv=Content-Type content="text/html;charset=utf-8"><meta http-equiv=X-UA-Compatible content=IE=EmulateIE7><title>www.like.com </title><style type="text/css"><!--body{font-size:20px;margin:auto;width:400px;}form{margin:25px 0px;border:solid green 3px;padding:10px;background:gray;overflow:hidden;}span{float:left;display:block-inline;width:90px;padding:5px 0 1px 80px; }--></style></head><body><?php //登录页面if(!empty($_COOKIE['user'])) $str = $_COOKIE['user'];else $str = "";if(isset($_GET['error']))echo $_GET['error'];if(isset($_GET['clr'])){session_start();session_destroy();}?><form action="mao.php?id=2" method="post">用户名: <input name="user" type="text" size=30 <?php echo "value='$str'"; ?> /><br /><br />密码: <input name="pwd" type="text" size=30 /><br />是否要保存用户名:<input name="check" type="checkbox" /><br/><span><input type="submit" value="登录" /></span><span><input type="reset"/></span></form><br /><br/><p><?php if(isset($_GET['id']))echo $_GET['id'];?></p><form action="regester.php" method="post">用户名: <input name="user" type="text" size=30 /><br /><br/>昵称: <input type="text" name="nicky" /><br/>密码: <input name="pwd" type="text" size=30 /><br /><span><input type="submit" value="注册" /></span><span><input type="reset"/></span></form><p><?php if(isset($_GET['delete'])){if(isset($_POST['deleteUser'])){$viewer=$_POST['deleteUser'];$viewer=trim($viewer);}else {$viewer="";}require_once 'SQLHelper.class.php';$sql = new SQLHelper();$sql -> deleteUser($viewer);}?></p><form action="session.php?delete=1" method="post">用户名: <input type="text" name="deleteUser" size=30 /><br/><span><input type="submit" value="删除用户" /></span><span><input type="reset"/></span></form>