H5+app如何使用session 服务端为PHP
背景:在用H5+ 写app的时候,当用户登陆后,需要记住登陆状态,可以直接使用storage把登陆信息保存在本地,类似于cookie的操作,但这样显然不安全,那么应该是要把登陆信息保存在服务器上。我这里模拟了session的过程,首先随机一个26位的字符串作为PHPSESSID保存在storange,然后把这个PHPSESSID通过ajax get的方式传到目标服务器,然后修改cookie中的PHPSESSID为传过去的值,这样就可以在服务器通过该ID找到对应的session文件了。
客户端代码:
var PHPSESSID = plus.storage.getItem("PHPSESSID");
if(PHPSESSID == null){
plus.storage.setItem("PHPSESSID",rand26());
clicked("/Home/login.html");
}else{
$.ajax({
url : "http://1.sckandroid.sinaapp.com/Home/session_login_check",
dataType : "jsonp",
type : "get",
cache : false,
data : {PHPSESSID : PHPSESSID},
success:function(data){
if(data["temp"] == 0 ){
clicked("/Home/login.html");
}else{
clicked("/Home/main.html");
}
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
});
}服务端代码:
public function login_check(){
$username = $_GET["username"];
$password = $_GET["password"];
$callback = $_REQUEST["callback"];
$user = M("user");
$where["username"] = $username;
$where["password"] = $password;
$data = $user->where($where)->find();
if($data){
$result = array("temp" => "1" , "realname" => $data["realname"]);
session_start();
$oldid = $_COOKIE["PHPSESSID"];
$newid = $_GET["PHPSESSID"];
session_destroy();
$_COOKIE["PHPSESSID"] = $newid;
session_start();
$_SESSION["username"] = $username;
}else{
$result = array("temp" => "0");
}
$json = json_encode($result);
echo $callback . "(" . $json . ")";
}主要的session操作:
session_start();
$oldid = $_COOKIE["PHPSESSID"];
$newid = $_GET["password"];
session_destroy();
$_COOKIE["PHPSESSID"] = $newid;
session_start();因为是在thinkphp中,一旦用到了session,就会自动创建一个PHPSESSID,那么就需要把这个文件删除,在把cookie中的PHPSESSID改了,再开启session功能声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
