PHP中Session的使用
平时自己也写过一些博客系统或者其他的一些文章、内容的后台管理系统。
这些系统的基础就是需要登陆,但是如何保持登陆状态是一个问题。
如果长久的保持登陆状态,我们会用cookie,如果是短期的状态,我们会用session。
大家如果接触到登陆功能,就一定会了解cookie是保存在本地,而session是保存在服务器中的。我也一直这样理解,也没有多想。(就算存储到服务器,本地应该还会存储一个信息来与服务器上的信息对应)
我是写PHP的,在php中,需要session_start()开启session即可。
PHP原生写法实例
session_start(); if($_POST[submit]) { $U_Account = trim($_POST[U_Account]); $U_Password = md5(trim($_POST[U_Password])); $sql = "select U_ID ,U_State,ROLE_ID,UN_ID from user where U_Account="$U_Account" and U_Password="$U_Password" limit 1"; $query = $userdb->query($sql); $info = $userdb->fetch_array($query); if ($info != false and $info["U_State"]==1) { //登陆成功 $_SESSION[U_ID]=$info[U_ID]; $_SESSION[ROLE_ID]=$info[ROLE_ID]; $_SESSION[UN_ID]=$info[UN_ID]; $_SESSION[shell]=md5($U_Account.$U_Password); echo "<script language="JavaScript">location.href="u_record.php";</script>"; //如果开启cookie,则保存cookie。 } else if ($info != false and $info["U_State"]==0) { echo "<script language="JavaScript">alert("请您先激活邮箱,然后重新登录");history.back(-1);</script>"; session_destroy(); } else { echo "<script language="JavaScript">alert("帐号或密码错误");history.back(-1);</script>"; session_destroy(); } $userdb->close(); }
如果在Laravel框架中,我们则可以这样写
首先要在路由器里面添加一个web中间件,或者在类的_construct()中添加web中间件,
所有的路由必须经过web中间件才可以启用session
Session的具体使用方法
class login extends Controller { public function login() { $info = Input::get(); $U_Account = $info["U_Account"]; $U_Password = md5($info["U_Password"]); $state = DB::table("user")->where(["U_Account" => $U_Account, "U_Password" => $U_Password])->first(); if ($state) { Session::put("login", md5($U_Account . $U_Password));//添加一个服务器标识,如果服务器中存在login,则标识登陆 Session::save(); return redirect("/"); } else { return view("user.login", ["state" => "登陆错误"]); } }}
我一直就这样使用,也没有去多想,但是我想给安卓写个客户端,保持登陆状态的时候,我就比较迷茫了,我如何来保持Session状态?服务器上保存了Session,那本地是如何告诉服务器我的浏览器或者安卓客户端是这个Session的主人?
显然,就算Session保存在服务端,本地依然需要保存一个文件,存储一个ID,来与服务器上的Session匹配。
如何存储呢,那又回归到cookie上了。
我们在本地存储一个cookie,存储了对应Session的ID,在我们浏览网页的时候,浏览器会自动地告诉服务器,我们本地有一个cookie,cookie里保存了一个session的ID,这样,我们就可以匹配session了。
同样的,我们在安卓里面要保持登陆状态,也可以采用Session机制。
Session的存储位置
1.文件存储
2.内存存储
3.数据库存储
许多网站在保持长久登陆的时候,采用了cookie的方式,但是用cookie的方式非常容易泄露一些信息,比如账号密码,就算本地保存的密码是md5等方式加密后的,依然带来很大的安全隐患,比如一些cookie存储了account,true,作为用户登陆成功的标志,那么我本地修改cookie,将account改成admin,就可以直接获取管理员的权限。
那么我们就可以采取将session存储到数据库的方法,本地存储一个cookie里面写了Session的ID。
如果用户更改了密码或者做了其他相关的操作,我们会在服务器的字段更改对应的数值,防止黑客的入侵。
在安卓中,我们可以采用Http Client中的cookie来保持临时的登陆状态,也可以将session id写入sharedpreference中,或者写入Sqlite中来保持用户的登陆状态。
- 上一篇:没有了
- 下一篇: laravel5.2中session的使用