实例
<div id = "header"> <h1><a href="index.php"></a></h1> <ul> <li><a style="text-decoration:none" href="index.php">首页</a></li> <?php if(isset($_COOKIE['name'])) { echo '<li><a href = "#">'.$_COOKIE['name'].' · 个人中心</a> '.'</li>'; echo '<li><a href = "loginout.php">退出</a></li>'; }else { echo "\n"; echo "\t\t"; echo '<li><a href = "login.php">登录</a></li>'; echo "\n"; } ?> </ul> </div>
运行实例 »
点击 "运行实例" 按钮查看在线实例
这里是头部代码:运行后预览图如下:主要是html代码和css
接下来是整个登录页面的代码,php脚本和html结合的代码:因为是引用的本地的代码,,,所以看不出效果,我把引用的代码直接注释了,因为主要是html的界面,
实例
<?php $page_title = '用户登录'; //数据库连接 //require 'include/dbconn.inc.php'; //加载函数库 //require 'include/func.inc.php'; //处理提交的数据 if (isset($_GET['action']) && $_GET['action'] == 'login') { //验证登录 $data = _check_login($pdo,$_POST['username'],$_POST['password']); //设置cookie setcookie('id',$data['id']); setcookie('name',$data['username']); _setcookies($data['username'],$_POST['time']); echo "<script type='text/javascript'>alert('登录成功');location.href='index.php';</script>"; exit(); } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>登录</title> </head> <body> <h2 style="color: lightblue">用户登录</h2> <form action="?action=login" method="post"> <dl> <dt></dt> <dd><font style="letter-spacing: 0.5em;margin-right: -0.5em;">用户名</font>:<input style="border-radius: 5px; width: 180px" type="text" name="username" class="text" size="10px" /></dd> <dd><font style="letter-spacing: 2em;margin-right: -2em;">密码</font>:<input style="border-radius: 5px; width: 180px"" type="password" name="password" class="text" /></dd> <dd><font style="letter-spacing: 2em;margin-right: -2em;">保留</font>: <input type="radio" name="time" value = "0" checked = "checked" />不保留 <input type="radio" name="time" value="1" />一天 <input type="radio" name="time" value="2" />一周 </dd> <?php if(!empty($_sys['code'])){ ?> <dd><font style="letter-spacing: 0.5em;margin-right: -0.5em;">验证码</font>:<input style="border-radius: 5px;" type="text" name="code" class = "text code" /> <img src="code.php" onclick="javascript:this.src='code.php?tm='+Math.random()" id = "code" /></dd> <?php } ?> <dd> <input style="border-radius: 5px;width: 45px;color: #3B3B3B;" onmouseover="this.style.backgroundColor='#CCCCCC'"onmouseout="this.style.backgroundColor='';" type="submit" value = "登录" class="button" /> <input style="border-radius: 5px;width: 45px;color: #3B3B3B;" onmouseover="this.style.backgroundColor='#CCCCCC'"onmouseout="this.style.backgroundColor='';" type="button" value="注册" id = "location" class="button location" onclick="window.location.href='#'" /> </dd> </dl> </form> <?php //include 'include/footer.inc.php' ?> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
做了cookie的过期时间的处理:这几天作业和工作堆积成山,css实在没空调了...
下面是登录成功后效果,我选择了一天的cookie过期时间:
因为是我本地的数据库,所以是没有办法显示登录效果的,所以这里只能是我这边的图了,登录之后的处理就上引用下面的核心数据处理代码的:
下面是核心函数库的代码:主要是用来验证登录的信息以及数据库验证数据的合法性
<?php
//登录验证
function _check_login($pdo,$username,$password)
{
//出师一个数组保存错误信息
$error = [];
//非空验证--用户名
if(empty($username))
{
$error[] = '用户名不能为空';
}else
{
// $username = PDO::quote(trim($username));
$username = trim($username);
}
//非空验证--密码
if(empty($password))
{
$error[] = '密码不能为空';
}
else
{
$password = sha1(trim($password));
}
//数据库验证
if(empty($error))
{
//预处理sql
$stmt = $pdo ->prepare("select id,username from user where username=:username and password=:password");
//执行
$stmt ->execute(array(":username"=>"$username",":password" =>"$password"));
$userdata = [];
$stmt -> bindColumn('id',$userdata['id']);
$stmt -> bindColumn('username',$userdata['username']);
if($stmt -> fetch(PDO::FETCH_BOUND)){
return $userdata;
}
else
{
$error[] = '邮箱或密码不正确,请从新输入';
}
return $error;
}
}
//cookie时间
function _setcookies($_username,$_time)
{
switch ($_time) {
//不保存密码
case '0': //浏览器进程
# code...
setcookie('name',$_username);
break;
//保存1天
case '1':
# code...
setcookie('name',$_username,time()+86400);
break;
//保存一周
case '2':
# code...
setcookie('name',$_username,time() + 604800);
break;
//保存一月
case '3':
setcookie('name',$_username,time() + 2592000);
break;
}
}
以上是cookie登录的案例,下面的是session的机制,html和css的代码都是一样的,主要在于设置的方式,cookie 是 setcookie(),session是$_SESSION[],cookie是可以设置过期时间的也是很方便的,session虽然也可以,但是很麻烦,需要该配置文件,在程序中还需要调用一个setMaxInactiveInterval的方法.而且不直观.一般都是会话结束后session自动销毁,是基于服务器端的,因此加载时也会造成一定的效率问题,cookie因为是浏览器端的,所以效率问题就会小非常多,但相对的,浏览器端的环境无人得知,安全性就是一个很大的问题.所以,追求效率的话用cookie,追求安全用session,当然,没有绝对性,一般都是相互结合使用.下面上一个session登录的吧
实例
<?php $page_title = '用户登录'; //数据库连接 // require 'include/dbconn.inc.php'; //加载函数库 // require 'include/func.inc.php'; //处理提交的数据 if (isset($_GET['action']) && $_GET['action'] == 'login') { //验证登录 $data = _check_login($pdo,$_POST['username'],$_POST['password']); //设置session $_SESSION['id'] = $data['id']; $_SESSION['name'] = $data['username']; echo "<script type='text/javascript'>alert('登录成功');location.href='index.php';</script>"; exit(); } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>登录</title> </head> <body> <h2 style="color: lightblue">用户登录</h2> <form action="?action=login" method="post"> <dl> <dt></dt> <dd><font style="letter-spacing: 0.5em;margin-right: -0.5em;">用户名</font>:<input style="border-radius: 5px; width: 180px" type="text" name="username" class="text" size="10px" /></dd> <dd><font style="letter-spacing: 2em;margin-right: -2em;">密码</font>:<input style="border-radius: 5px; width: 180px"" type="password" name="password" class="text" /></dd> <?php if(!empty($_sys['code'])){ ?> <dd><font style="letter-spacing: 0.5em;margin-right: -0.5em;">验证码</font>:<input style="border-radius: 5px;" type="text" name="code" class = "text code" /> <img src="code.php" onclick="javascript:this.src='code.php?tm='+Math.random()" id = "code" /></dd> <?php } ?> <dd> <input style="border-radius: 5px;width: 45px;color: #3B3B3B;" onmouseover="this.style.backgroundColor='#CCCCCC'"onmouseout="this.style.backgroundColor='';" type="submit" value = "登录" class="button" /> <input style="border-radius: 5px;width: 45px;color: #3B3B3B;" onmouseover="this.style.backgroundColor='#CCCCCC'"onmouseout="this.style.backgroundColor='';" type="button" value="注册" id = "location" class="button location" onclick="window.location.href='#'" /> </dd> </dl> </form> <?php //include 'include/footer.inc.php' ?> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
实际页面是一样,登陆后的效果也是一样的,只不过session是在服务器端的:
session在会话结束后会自动销毁,一般来说,对于使用者的安全性信息建议是用session,页面跳转以及分页的一些信息可以结合cookie来使用