php 中avcapturesession黑屏的使用,要跟踪每个页面以验证是否登录,但只存储一个$admin=ture 是否太简单而安全性差

网页设计教程与开发
提供各种常见网页效果
提供各种各样的设计教程
装扮QQ,让QQ变得更酷
设计参考,提高自升水平
学习服务器和操作系统
提供各种素材和工具
收藏学习资料
您现在的位置:&&>>&&>>&&>>&&>>&&>>&正文
PHP中如何使用session实现保存用户登录信息
session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。
使用session保存页面登录信息
1、数据库连接配置页面:connectvars.php
//数据库的位置
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
//数据库名
define('DB_NAME','test') ;
2、登录页面:logIn.php
//插入连接数据库的相关信息
require_once 'connectvars.php';
//开启一个会话
session_start();
$error_msg = "";
//如果用户未登录,即未设置$_SESSION['user_id']时,执行以下代码
if(!isset($_SESSION['user_id'])){
if(isset($_POST['submit'])){//用户提交登录表单时执行如下代码
$dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$user_username = mysqli_real_escape_string($dbc,trim($_POST['username']));
$user_password = mysqli_real_escape_string($dbc,trim($_POST['password']));
if(!empty($user_username)&&!empty($user_password)){
//MySql中的SHA()函数用于对字符串进行单向加密
$query = "SELECT user_id, username FROM mismatch_user WHERE username = '$user_username' AND "."password = SHA('$user_password')";
//用用户名和密码进行查询
$data = mysqli_query($dbc,$query);
//若查到的记录正好为一条,则设置SESSION,同时进行页面重定向
if(mysqli_num_rows($data)==1){
$row = mysqli_fetch_array($data);
$_SESSION['user_id']=$row['user_id'];
$_SESSION['username']=$row['username'];
$home_url = 'loged.php';
header('Location: '.$home_url);
}else{//若查到的记录不对,则设置错误信息
$error_msg = 'Sorry, you must enter a valid username and password to log in.';
$error_msg = 'Sorry, you must enter a valid username and password to log in.';
}else{//如果用户已经登录,则直接跳转到已经登录页面
$home_url = 'loged.php';
header('Location: '.$home_url);
&title&Mismatch - Log In&/title&
&link rel="stylesheet" type="text/css" href="style.css" /&
&h3&Msimatch - Log In&/h3&
&!--通过$_SESSION['user_id']进行判断,如果用户未登录,则显示登录表单,让用户输入用户名和密码--&
if(!isset($_SESSION['user_id'])){
echo '&p class="error"&'.$error_msg.'&/p&';
&!-- $_SERVER['PHP_SELF']代表用户提交表单时,调用自身php文件 --&
&form method = "post" action="&?php echo $_SERVER['PHP_SELF'];?&"&
&fieldset&
&legend&Log In&/legend&
&label for="username"&Username:&/label&
&!-- 如果用户已输过用户名,则回显用户名 --&
&input type="text" id="username" name="username"
value="&?php if(!empty($user_username)) echo $user_ ?&" /&
&label for="password"&Password:&/label&
&input type="password" id="password" name="password"/&
&/fieldset&
&input type="submit" value="Log In" name="submit"/&
3、登入页面:loged.php
//使用会话内存储的变量值之前必须先开启会话
session_start();
//使用一个会话变量检查登录状态
if(isset($_SESSION['username'])){
echo 'You are Logged as '.$_SESSION['username'].'&br/&';
//点击“Log Out”,则转到logOut页面进行注销
echo '&a href="logOut.php"& Log Out('.$_SESSION['username'].')&/a&';
/**在已登录页面中,可以利用用户的session如$_SESSION['username']、
* $_SESSION['user_id']对数据库进行查询,可以做好多好多事情*/
4、注销session页面:logOut.php(注销后重定向到lonIn.php)
//即使是注销时,也必须首先开始会话才能访问会话变量
session_start();
//使用一个会话变量检查登录状态
if(isset($_SESSION['user_id'])){
//要清除会话变量,将$_SESSION超级全局变量设置为一个空数组
$_SESSION = array();
//如果存在一个会话cookie,通过将到期时间设置为之前1个小时从而将其删除
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-3600);
//使用内置session_destroy()函数调用撤销会话
session_destroy();
//location首部使浏览器重定向到另一个页面
$home_url = 'logIn.php';
header('Location:'.$home_url);
好了以上代码就是本文的全部内容,代码很简单,很多地方都附有注释文字说明,有哪里不明白的地方欢迎给我留言,我会在第一时间给大家答复的。谢谢!
转载请注明:破洛洛(谢谢合作)
上一篇文章: 下一篇文章:
网友评论:
[][][][][][][][][][]使用PHP会话(Session)实现用户登陆功能
字体:[ ] 类型:转载 时间:
本篇文章是对PHP会话(Session)实现用户登陆功能进行了详细的分析介绍,需要的朋友参考下
对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用。由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多。对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证。如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能 只做一次验证。为什么呢?因为客户端 Cookie 中的信息是有可能被修改的。假如你存储 $admin 变量来表示用户是否登陆,$admin 为 true 的时候表示登陆,为 false 的时候表示未登录,在第一次通过验证后将 $admin 等于 true 存储在 Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为 true 的 $admin 变量那不是就立即取的了管理权限么?非常的不安全。而 Session 就不同了,Session 是存储在服务器端的,远程用户没办法修改 Session 文件的内容,因此我们可以单纯存储一个 $admin 变量来判断是否登陆,首次验证通过后设置 $admin 值为 true,以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。而且可以减少每次为了验证 Cookie 而传递密码的不安全性了(Session 验证只需要传递一次,假如你没有使用 SSL 安全协议的话)。即使密码进行了 md5 加密,也是很容易被截获的。当然使用 Session 还有很多优点,比如控制容易,可以按照用户自定义存储等(存储于数据库)。我这里就不多说了。Session 在 php.ini 是否需要设置呢?一般不需要的,因为并不是每个人都有修改 php.ini 的权限,默认 Session 的存放路径是服务器的系统临时文件夹,我们可以自定义存放在自己的文件夹里,这个稍后我会介绍。开始介绍如何创建 Session。非常简单,真的。启动 Session 会话,并创建一个 $admin 变量: 代码如下:&?php// 启动 Sessionsession_start();// 声明一个名为 admin 的变量,并赋空值。$_SESSION["admin"] =?& 如果你使用了 Seesion,或者该 PHP 文件要调用 Session 变量,那么就必须在调用 Session 之前启动它,使用 session_start() 函数。其它都不需要你设置了,PHP 自动完成 Session 文件的创建。执行完这个程序后,我们可以到系统临时文件夹找到这个 Session 文件,一般文件名形如:sess_4cdbff89168ec,后面是 32 位编码后的随机字符串。用编辑器打开它,看一下它的内容: 代码如下:admin|N;一般该内容是这样的结构: 代码如下:变量名|类型:长度:值;并用分号隔开每个变量。有些是可以省略的,比如长度和类型。我们来看一下验证程序,假设数据库存储的是用户名和 md5 加密后的密码:login.php 代码如下:&?php// 表单提交后...$posts = $_POST;// 清除一些空白符号foreach ($posts as $key =& $value) {$posts[$key] = trim($value);}$password = md5($posts["password"]);$username = $posts["username"]; $query = "SELECT `username` FROM `user` WHERE `password` = '$password' AND `username` = '$username'";// 取得查询结果$userInfo = $DB-&getRow($query); if (!empty($userInfo)) {// 当验证通过后,启动 Sessionsession_start();// 注册登陆成功的 admin 变量,并赋值 true$_SESSION["admin"] =} else {die("用户名密码错误");}?& 我们在需要用户验证的页面启动 Session,判断是否登陆: 代码如下:&?php// 防止全局变量造成安全隐患$admin =// 启动会话,这步必不可少session_start();// 判断是否登陆if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true) {echo "您已经成功登陆";} else {// 验证失败,将 $_SESSION["admin"] 置为 false$_SESSION["admin"] =die("您无权访问");}?& 是不是很简单呢?将 $_SESSION 看成是存储在服务器端的数组即可,我们注册的每一个变量都是数组的键,跟使用数组没有什么分别。如果要登出系统怎么办?销毁 Session 即可。 代码如下:&?phpsession_start();// 这种方法是将原来注册的某个变量销毁unset($_SESSION['admin']);// 这种方法是销毁整个 Session 文件session_destroy();?& Session 能否像 Cookie 那样设置生存周期呢?有了 Session 是否就完全抛弃 Cookie 呢?我想说,结合 Cookie 来使用 Session 才是最方便的。Session 是如何来判断客户端用户的呢?它是通过 Session ID 来判断的,什么是 Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保 Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,重新注册一个 Session ID。如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。我们来手动设置 Session 的生存期: 代码如下:&?phpsession_start();// 保存一天$lifeTime = 24 * 3600;setcookie(session_name(), session_id(), time() + $lifeTime, "/");?& 其实 Session 还提供了一个函数 session_set_cookie_params(); 来设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用: 代码如下:&?php// 保存一天$lifeTime = 24 * 3600;session_set_cookie_params($lifeTime);session_start();$_SESSION["admin"] =?& 如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。假设客户端禁用 Cookie 怎么办?没办法,所有生存周期都是浏览器进程了,只要关闭浏览器,再次请求页面又得重新注册 Session。那么怎么传递 Session ID 呢?通过 URL 或者通过隐藏表单来传递,PHP 会自动将 Session ID 发送到 URL 上,URL 形如:/index.php?PHPSESSID= bba5b2a240a77e5b44cfa01d49cf9669,其中 URL 中的参数 PHPSESSID 就是 Session ID了,我们可以使用 $_GET 来获取该值,从而实现 Session ID 页面间传递。 代码如下:&?php// 保存一天$lifeTime = 24 * 3600;// 取得当前 Session 名,默认为 PHPSESSID$sessionName = session_name();// 取得 Session ID$sessionID = $_GET[$sessionName];// 使用 session_id() 设置获得的 Session IDsession_id($sessionID); session_set_cookie_params($lifeTime);session_start();$_SESSION['admin'] =?& 对于虚拟主机来说,如果所有用户的 Session 都保存在系统临时文件夹里,将给维护造成困难,而且降低了安全性,我们可以手动设置 Session 文件的保存路径,session_save_path() 就提供了这样一个功能。我们可以将 Session 存放目录指向一个不能通过 Web 方式访问的文件夹,当然,该文件夹必须具备可读写属性。 代码如下:&?php// 设置一个存放目录$savePath = './session_save_dir/';// 保存一天$lifeTime = 24 * 3600;session_save_path($savePath);session_set_cookie_params($lifeTime);session_start();$_SESSION['admin'] =?& 同 session_set_cookie_params(); 函数一样,session_save_path() 函数也必须在 session_start() 函数调用之前调用。我们还可以将数组,对象存储在 Session 中。操作数组和操作一般变量没有什么区别,而保存对象的话,PHP 会自动对对象进行序列化(也叫串行化),然后保存于 Session 中。下面例子说明了这一点:person.php 代码如下:&?phpclass person {var $function output() {echo $this-&}function setAge($age) {$this-&age = $}}?& setage.php 代码如下:&?phpsession_start();require_once 'person.php';$person = new person();$person-&setAge(21);$_SESSION['person'] = $echo '&a href='output.php'&check here to output age&/a&';?&output.php 代码如下:&?php// 设置回调函数,确保重新构建对象。ini_set('unserialize_callback_func', 'mycallback');function mycallback($classname) {&&& include_once $classname . '.php';}session_start();$person = $_SESSION['person'];//& 输出 21$person-&output();?&当我们执行 setage.php 文件的时候,调用了 setage() 方法,设置了年龄为 21,并将该状态序列化后保存在 Session 中(PHP 将自动完成这一转换),当转到 output.php 后,要输出这个值,就必须反序列化刚才保存的对象,又因为在解序列化的时候需要实例化一个未定义类,所以我们定义了以后回调函数,自动包含 person.php 这个类文件,因此对象被重构,并取得当前 age 的值为 21,然后调用 output() 方法输出该值。另外,我们还可以使用 session_set_save_handler 函数来自定义 Session 的调用方式。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
(学士)学位论文-基于php的网上书店-.doc 40页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:250 &&
(学士)学位论文-基于php的网上书店-
你可能关注的文档:
··········
··········
毕业设计(论文)题目:基于PHP的网上书店学生姓名学号班级信息管理102201H所属院(系)计算机科学与技术系指导教师日 基于PHP的网上书店摘要随着计算机网络技术和通讯技术的飞速发展,淘宝等一系列的电子商务网站的成功并迅速的发展,给许多的企业创造了许多的网络商机。企业已不再拘泥于传统的销售模式,各个领域也纷纷加入到了电子商务中。网上书店的产生即是一种新型图书销售渠道。网上书店系统是一个可以无限伸展的电子系统书库.它可以容纳无限的图书或图样乃至于内容;检索查询可以不受时间空间的限制,图书不受上架周期的限制,可以提高书籍的销量,为出版社尤其是专业,学术出版社提供窗口支持,该系统的运用也可以推动网上支付,邮政,速递等服务行业的迅速发展。通过网上书店,人们可以足不出户就选购自己所需的图书。网上书店系统主要由前台图书销售和后台管理维护系统两部分构成;在支持整个网站的运作功能的基础上,能帮助用户方便快速的选购图书,同时也能帮助后台管理员管理相关业务;并具有占用系统资源少、信息量大、站点维护方便、便于扩充和更新、易于继承和保护历史数据等优点。该系统可以克服传统图书销售中地域、广告宣传、人力资源不足等限制,能很好地适应网上销售需求。该网站的代码编写使用的是PHP语言,利用MySQL数据库存储数据信息,网站设计使用HTML+CSS+JavaScript。关键词:网上书店,PHP,MySQL,购书,电子商务TheonlinebookstorebasedonPHPAbstractWiththerapiddevelopmentofcomputernetworktechnologyandcommunicationtechnology,thedevelopmentofTaobaoandaseriesofelectroniccommercewebsitesuccessfullyandquickly,createmanyoftheInternetbusinessopportunitiesformanyenterprises.Enterprisesarenolongerconfinedtothetraditionalsalesmode,fieldshavealsojoinedtotheelectroniccommerce.Onlinebookstoreisanewgenerationofbooksaleschannels.Onlinebookstoresystemisanunlimitedextensionoftheelectronicsystemoflibrary.Itcanaccommodateinfiniteboothequerymaynotbesubjecttotherestrictionsoftimeandspacesearch,bookshelfperiodwithoutrestrictions,canincreasethesalesofbooksforthepress,especiallyprofessional,AcademicPressprovidesawindowsupport,applicationthesystemcanalsopromotetherapiddevelopmentofInternetpayment,postal,courierservices.Throughtheonlinebookstore,peoplecanremainwithindoorswillbuythebookstheyneed.Onlinebookstoresystemmainlysalesbythebookandthebackstagemanagementmaintenancesyssupporttheoperationoftheentiresitefunction,canhelptheusertoconvenientlyandquicklytobuybooks,butalsocanhelptheadministratormanagandhastheadvantagesofoccupyinglesssystemresources,alargeamountofinformation,convenient,sitemaintenanceconvenientexpandandupdate,easytoinheritandprotectthehistoricaldata.Thesystemcanovercomethetraditionalbooksalesintheregion,advertis
正在加载中,请稍后...PHP后台技术-后台登录安全问题和显示多条图片数据库设计
PHP后台技术-后台登录安全问题和显示多条图片数据库设计
PHP后台技术-后台登录安全问题和显示多条图片数据库设计
3 权限-安全管理:
问题:后台安全问题,因为别人可以根据路径直接猜测访问你的后台,恶意删除或修改你的网站数据。若不把每个页面都设置一个关卡,则那个页面就存在bug。
解决:admin登录后,采用session保存登录信息,每个页面均判断session中是否已经登录,若没有登录跳转到后台登录页面。
第一步:登录后,用session保存已登录信息:
session_start();
$_SESSION['adminname']=$
$_SESSION['adminlogin']=1;
第二步:每个页面增加是否登录的判断关卡:
if(!$_SESSION[adminlogin]){
&echo &&script&location='/myshop3/admin/login/login.php'&/script&&;
第三步:logout退出登录,清空session,并且cookie保存登录记录:
session_start();
session_unset();
session_destroy();
setcookie(session_name(),'',time()-3600,'/');
echo &&script&location='login.php'&/script&&;
4 每条新闻显示多张图片-数据库设计角度
问题:若一条新闻有多张图片,图片数量不确定,把news表增加多个imgsrc属性,这样很不灵活,很不可取。
解决:数据库增加图片表photo(id,newsid,src),改变定式思维,想添加多个相同的imgsrc就添加多个属性,可以增加一张表,把imgsrc设为非主属性,主属性设为news的id,这样多张图片就可以灵活的在数据库中插入。
总结:巧妙的把插入一列的思维转化为插入一行的思维。
我的热门文章
即使是一小步也想与你分享php 用户登录:如何判断用户是否登录
我的图书馆
php 用户登录:如何判断用户是否登录
本文《php 用户登录:如何判断用户是否登录》的核心主要将:判断用户登陆主要分几个过程,第一步是用户登陆成功后把数据保存到session中,然后当用户访问需要登陆过的用户权限时就来判断session是否为空,如果不是就登录成功。
下面来看个实例& 如何判断用户是否登录
&?php教程session_start();
if(getconfig("chatroom_admin")==$_post["username"]&&getconfig("chatroom_adminpassword")==md5($_post["password"])){&//登陆成功,注册session&session_register("administrator");&if(isset($_session["hack_num"]))&{& session_unregister("hack_num");&}&$_session["administrator"] = "yes";&header("location:main.php");&}else{&if($_session["hack_num"]=="")&{& session_register("hack_num");& $_session["hack_num"] = 1;&}&else&{& $_session["hack_num"] ++;
&}&header("location:../notice.php?id=".admin_login_lost);&}?&
看到红色的没,那里就是用户登录成功把数据保存到session['hack_num']面。
&?php//这个页面首先判断用户是否正确登录,如未登录,就转到登录页面。session_start();if((!$user_id)or(!$user_array[hack_num])or(!$user_array[hack_num])){&&& header("location: login.php3");}?&
上面这段代码是用来判断session['hack_num']是否有值了,有就是登录成功了
本文来源网页制作教程网 原文链接:
TA的推荐TA的最新馆藏[转]&[转]&}

我要回帖

更多关于 session跟踪 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信