前言:
我从昨天1点钟睡到今早上11:00,真是一个困啊。昨天小幻来挑错,妈妈再也不用担心我调试了。好了,今天不扯了进入正题,小幻昨天说session的问题,或者用cookie写一个保存状态的登陆效果,我就脑残的写了一个。
PS:我也想找到美工了,虽然我们两个都不知道PHP和HTML怎么混编 ….
我们要实现:PHP写一个前台登陆功能,与MySQL中的数据结果进行比较,判断成功后跳转到inlog页面,建立SESSION,跳入到conntent页面显示SESSION ID与登陆状态,并实现在UPSET页面的注销SESSION。
实现过程:
内容补充$_SESSION与COOKIE:
据说参加程序员面试经常问这个问题,简单的来说COOKIE与SESSION都是用来保存会话状态的,不同的是——SESSION是在服务器端保存的一个会话状态文件,而COOKIE是用户端保存的会话文件,从安全性来说SESSION是根据URL生成唯一对应客户端ID且保存在服务器上安全性较好,COOKIE文件包含SESSION ID ,cookie的构成是 SESSION ID + COOKIE Name +其他 。ps:禁用COOKIE后,SESSION保存状态法也会失败。
SESSION会话函数使用:
<?php session_start(); //引用使用SESSION前必须声明,且前面最好没有echo。 $_SESSION["下标名"]=值;//SESSION赋值法 SESSION_ID ;//可以输出查看SESSION ID /********消除SESSION法********/ session_destroy();//销毁服务器端所有SESSION unset($_SESSION["下标名"]);//销毁指定SESSION $_SESSION["下标名"]=null;//同上 ?>
SESSION一旦创建,就可以在不同页面中引用,并且可以传值,每个页面都要声明SESSION函数开始。
Index.php页面创建:
<?php 方块网络—— 前台登陆程序 </p> <p><span class="a3">亲爱的:</span> <?php if(!@$a=fopen("num.txt","r")) { echo"文件不存在";$num=0; }else{ $num=fgets($a,10); fclose($a); } $num++; $ff=fopen("num.txt","w"); fwrite($ff,$num); fclose($ff); echo "您是访问此页面的第".$num."人";?> /*上面是以前讲的一个文件计数器小程序*/ <form action="login.php" method="post"> </br>用户名<input type="text"name="user"></br> 密码:<input type="text"name="password"> <input type="submit"value="登陆"> </form> ?>
Login.php核实登陆页面创建:
<?php include("connect.php");//引入数据库 header("Content-type:text/html;charset=utf-8"); $user=$_POST['user']; $password=$_POST['password']; $sql="select `user`,`password`from`ex1` where `user`='$user'"; $query=mysql_query($sql); $rs=mysql_fetch_array($query); if($password==$rs['password']){ echo"正确,正在尝试建立SESSION 您可以尝试跳转到"."<a href='content.php'>跳转地址 </a>"; session_start(); $_SESSION["user"]=$user; }else{header("refresh:6;url=index.php");//六秒后分返回指定页面。 echo "发生错误,请稍等返回.<a href='index.php'>登陆页面</a>....<br>6秒后自动跳转"; } ?>
Content.php后台显示页面创建:
<?php header("Content-type:text/html;charset=GBK"); session_start(); echo " your SESSION ID is :".session_id(); if(!$_SESSION["user"]==""){ echo "</br>"."您已作为".$_SESSION["user"]."登陆"; /*这里可以引用登陆后的页面(要重新核对数据库中是否存在,防止 null值登陆*/ echo"</br>"."您可以尝试——"."<a href='unset.php'>注销登陆</a>";} else {echo"你没有正常登陆"."<a href='login.php'>点击尝试重新登陆</a>";} ?>
删除SENSSION状态,unset.php页面:
<?php header("content-type:text/html;charset=GBK"); session_start(); if($_SESSION["user"]!==""){ echo"<script language=javascript> alert('注销账号已经成功');</script>"; $_SESSION["user"]=null; }else{ echo"您已经注销或者未登录";} ?>
后记:
好像没有后记,SESSION能实现的功能好多好多,无怪乎小幻说不常用看手册,它甚至能实现登陆权限的划分,凡是会话相关通过URL通信传递信息都能做。