公眾號開發今天發現居然不能用session,弄了好半天還以為代碼出問題了。趕緊寫篇博客記錄下。
問題
普通web開發一般這么用session來保存狀態。
session_start();
if(isset($_SESSION['user']))//已經登錄
{
echo '已經登錄';
}
else
{
//跳轉登錄頁面...
//保存狀態
$_SESSION['user'] = $_POST['username'];
}
1
2
3
4
5
6
7
8
9
10
11
12
類似的處理機制,在自己的公眾號服務器上卻發現不生效,session無法保存之前記錄的狀態。打印了session id發現微信服務器每次訪問我的服務器session都不一樣,這樣肯定session的信息沒法保存。
查了一些資料,
由於公眾平台的特殊形式,用戶的消息是通過騰訊服務器直接post的過來的,服務器是不帶cookie過來的,所以當你想用平時直接設置cookie和session是不行的,cookie是徹底沒戲,session的問題是 服務器每次過來不帶session_id 所有我們也無話讀取session文件。
解決問題
網上給的一種解決方案:
用戶post過來的openid當做sessionid ,openid是一個唯一不重復的,這樣每個用戶的狀態是可以獨立的
$wObj = new atweixin();
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$wObj->fromUsername = $postObj->FromUserName;
session_id($wObj->fromUsername);
session_start();
1
2
3
4
5
6
但是接下來怎么做?
我直接用$_SESSION數組還是不能保存
if(!isset($_SESSION['token']))
{
user_dump('acess token');
$_SESSION['token'] = '1234';
}
---------------------
作者:Pony小馬
來源:CSDN
原文:https://blog.csdn.net/pony_maggie/article/details/52462084
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!