我基于原有的微信平台CMS做了一个功能,然后把功能的链接放到菜单中,通过点击菜单进入页面。但是一开始可以顺利进入,还点了几次异步上传照片,但是会显示error openid:{wechat_id}错误提示。可是后来就不行了,进不了页面,一点就是在一个空白页面显示error openid:{wechat_id},在windows的微信开发者工具又显示no token ,后来又不知道怎么老是跳成手机端首页。恳求高手帮帮忙。
回复讨论(解决方案)
这些错误提示时你们自己代码写的吧,你要把对应代码发出来
这些错误提示时你们自己代码写的吧,你要把对应代码发出来
<?phpclass WapAction extends BaseAction{ public $token; public $wecha_id; public $fakeopenid; public $fans; public $homeInfo; public $bottomeMenus; public $wxuser; public $user; public $group; public $company; public $shareScript; public $sign; private $_appid; private $_secret; private $_redirect_uri; private $_auth; public $owxuser; protected function _initialize() { parent::_initialize(); $this->_appid = C("appid"); $this->_secret = C("secret"); $this->time = 0; $this->token = $this->_get("token"); if (ALI_FUWU_GROUP && (date("Y") == 2015)) { $fuwuuserlist = M("fuwuuser")->where(array("token" => $this->token))->select(); foreach ($fuwuuserlist as $fuwuvo ) { $fuwuuserinfo = M("userinfo")->where(array("token" => $this->token, "wecha_id" => $fuwuvo["wecha_id"]))->find(); if ($fuwuuserinfo == "") { if ($fuwuvo["gender"] == "M") { $fuwuvo["gender"] = 1; } else if ($fuwuvo["gender"] == "F") { $fuwuvo["gender"] = 2; } else { $fuwuvo["gender"] = 0; } $add_userinfo_hb = array("token" => $this->token, "wecha_id" => $fuwuvo["wecha_id"], "issub" => 1, "portrait" => $fuwuvo["avatar"], "truename" => $fuwuvo["real_name"], "nickname" => $fuwuvo["real_name"], "wechaname" => $fuwuvo["real_name"], "sex" => $fuwuvo["gender"]); $add_userinfo_hb = array_map("nulltoblank", $add_userinfo_hb); $id_userinfo = M("userinfo")->add($add_userinfo_hb); } else { if (($fuwuuserinfo["portrait"] == "") || ($fuwuuserinfo["wechaname"] == "")) { if ($fuwuvo["gender"] == "M") { $fuwuvo["gender"] = 1; } else if ($fuwuvo["gender"] == "F") { $fuwuvo["gender"] = 2; } else { $fuwuvo["gender"] = 0; } $save_userinfo_hb = array("token" => $this->token, "wecha_id" => $fuwuvo["wecha_id"], "issub" => 1, "portrait" => $fuwuvo["avatar"], "truename" => $fuwuvo["real_name"], "nickname" => $fuwuvo["real_name"], "wechaname" => $fuwuvo["real_name"], "sex" => $fuwuvo["gender"]); $save_userinfo_hb = array_map("nulltoblank", $save_userinfo_hb); $up_userinfo = M("userinfo")->where(array("token" => $this->token, "wecha_id" => $fuwuvo["wecha_id"]))->save($save_userinfo_hb); } } } } if (strlen($this->token)) { $_SESSION["wap_token"] = $this->token; } if (!$this->token) { $this->token = $_SESSION["wap_token"]; } if (!empty($_SESSION["wap_token"])) { $this->token = $_SESSION["wap_token"]; } if (!$this->token && !strpos(MODULE_NAME, "Drp") === false) { $id = $this->_get("id"); if ($id) { $did = M("Distributor_store")->where(array("id" => $id))->getField("did"); $this->token = M("Distributor")->where(array("id" => $did))->getField("token"); } } $this->assign("token", $this->token); if (!$this->token) { exit("no token"); } if ($this->token && !preg_match("/^[0-9a-zA-Z]{3,42}$/", $this->token)) { exit("error token"); } $this->wxuser = S("wxuser_" . $this->token); if (!$this->wxuser || 1) { $this->wxuser = D("Wxuser")->where(array("token" => $this->token))->find(); S("wxuser_" . $this->token, $this->wxuser); } $this->owxuser = $this->wxuser; $this->assign("wxuser", $this->wxuser); $this->_checkVipTime($this->wxuser); $fake = 0; if (($this->wxuser["winxintype"] != 3) && $this->_appid && $this->_secret) { if ($this->wxuser["oauth"] == 1) { if (!$this->isAgent) { $this->wxuser["appid"] = trim($this->_appid); $this->wxuser["appsecret"] = trim($this->_secret); } else { $this->wxuser["appid"] = $this->thisAgent["appid"]; $this->wxuser["appsecret"] = $this->thisAgent["appsecret"]; } } $fake = 1; } $toAuth = 0; if ((C("server_topdomain") == "paiyi.net.cn") && (C("site_url") != "http://weixintest.paiyi.net.cn")) { $toAuth = 1; } else { $toAuth = $this->wxuser["oauth"]; } if ((C("server_topdomain") == "pigcms.cn") && ($this->wxuser["winxintype"] != 3)) { $this->wxuser["appid"] = $this->_appid; $this->wxuser["appsecret"] = $this->_secret; $this->wxuser["oauth"] = 0; $this->wxuser["is_domain"] = 1; $fake = 1; } $wexintype = $this->wxuser["winxintype"]; $session_openid_name = "token_openid_" . $this->token; $session_fakeopenid_name = "token_fakeopenid_" . $this->token; $session_reopenid_name = "token_reopenid_" . $this->token; $session_oauthed_name = "token_oauthed_" . $this->token; $getUserInfoModules = getUserInfoModule::index(); $getUserinfo = 0; if (isset($_GET["rget"]) || intval($_GET["ali"])) { $_SESSION["otherSource"] = 1; $toAuth = 0; $this->wxuser["oauthinfo"] = 0; } if (isset($_SESSION["otherSource"])) { $toAuth = 0; } if ($this->wxuser["oauthinfo"] && !$_SESSION[$session_oauthed_name]) { if ($_SESSION[$session_openid_name]) { $fansInfo = M("Userinfo")->where(array("token" => $this->token, "wecha_id" => $_SESSION[$session_openid_name]))->find(); if ($toAuth) { if (!$fansInfo || !$fansInfo["wechaname"] || !$fansInfo["portrait"]) { unset($_SESSION[$session_openid_name]); $getUserinfo = 1; } } } else { if (isset($_SESSION[$session_reopenid_name]) && $_SESSION[$session_reopenid_name]) { $fansInfo = M("Userinfo")->where(array("token" => $this->token, "wecha_id" => $_SESSION[$session_reopenid_name]))->find(); if (!$fansInfo || !$fansInfo["wechaname"] || !$fansInfo["portrait"]) { unset($_SESSION[$session_openid_name]); unset($_SESSION[$session_reopenid_name]); $getUserinfo = 1; } } else { $getUserinfo = 1; } } } $this->isFuwu = 0; $this->isWechat = 0; $userAgent = strtolower($_SERVER["HTTP_USER_AGENT"]); if (strpos($userAgent, "alipayclient")) { $this->isFuwu = 1; } else if (strpos($userAgent, "micromessenger")) { $this->isWechat = 1; } if (!M("Weixin_account")->where(array("type" => 1))->find()) { M("Wxuser")->where("1")->save(array("type" => 0)); } $this->cookieToSession(); if ($_GET["wecha_id"] && ($_GET["wecha_id"] != $_SESSION[$session_openid_name]) && (3 != $wexintype)) { unset($_SESSION[$session_openid_name]); unset($_SESSION[$session_oauthed_name]); cookie("oauth2_" . $this->token, NULL); } if ($this->isFuwu) { if ($_GET["wecha_id"] != "") { $this->wecha_id = $_GET["wecha_id"]; } else { $this->wecha_id = session("wecha_id"); } session("wecha_id", $this->wecha_id); $thisfuwuuser = M("fuwuuser")->where(array("token" => $this->token, "wecha_id" => $this->wecha_id))->find(); $isFuwuoauth = session("isFuwuoauth"); } if ($this->isFuwu && ($isFuwuoauth != "yes")) { $fw_wecha_id = FuwuOAuth::index($this->token); if ($fw_wecha_id != "no") { $this->wecha_id = $fw_wecha_id; session("wecha_id", $this->wecha_id); session("isFuwuoauth", "yes"); } else if ($this->wecha_id == "") { $this->error("服务窗没有获取粉丝信息权限<br/>请在服务窗开发者中确认开通"); exit(); } $_SESSION[$session_openid_name] = $this->wecha_id; $_SESSION[$session_oauthed_name] = 1; } $users = M("Users")->where(array("id" => $this->wxuser["uid"]))->find(); if (("payReturn" == ACTION_NAME) && (0 < $users["is_syn"])) { $_SESSION[$session_openid_name] = $_GET["wecha_id"]; }
if (empty($_SESSION[$session_openid_name]) && (0 < $users["is_syn"])) { $_SESSION["auth_callback_" . $this->token] = array("url" => getSelfUrl(array("wecha_id")), "token" => $this->token); $url = $users["source_domain"] . A("Home/Auth")->getCallbackUrl($users["is_syn"], "auth") . "token=" . $this->token . "&source=pigcms"; header("Location:" . $url); exit(); } if (2 == $users["is_syn"]) { $url = $users["source_domain"] . A("Home/Auth")->getCallbackUrl($users["is_syn"], "follow") . "wecha_id=" . $_SESSION[$session_openid_name]; $this->_auth = json_decode(HttpClient::getInstance()->get($url)); if (1 == $this->_auth->code) { M("Userinfo")->where(array("token" => $this->token, "wecha_id" => $_SESSION[$session_openid_name]))->setField("issub", 1); } else { M("Home")->where(array("token" => $this->token))->setField("gzhurl", $this->_auth->follow->url); $this->wxuser["qr"] = $this->_auth->follow->qrcode; $this->wxuser["wxname"] = $this->_auth->follow->wechat; } } if (!isset($_SESSION[$session_openid_name]) || !$_SESSION[$session_openid_name]) { if ($this->isFuwu) { } else { $apiOauth = new apiOauth(); if ((!$_GET["wecha_id"] || (urldecode($_GET["wecha_id"]) == "{wechat_id}")) && ($_GET["wecha_id"] != "no") && $this->wxuser["appid"] && ((($this->wxuser["type"] == 0) && ($this->wxuser["appsecret"] != "")) || ($this->wxuser["type"] == 1)) && ($toAuth == 1)) { $token_info = $apiOauth->webOauth($this->wxuser, "", $fansInfo); } if (!empty($token_info)) { $this->wecha_id = $token_info["openid"]; if (3 == $wexintype) { $fake = 0; } if ($fake) { if (isset($_SESSION[$session_fakeopenid_name])) { $datainfo["issub"] = 1; $this->wecha_id = $_SESSION[$session_fakeopenid_name]; $userinfoModel = M("Userinfo"); $userinfoData = $userinfoModel->where(array("token" => $this->token, "wecha_id" => $_SESSION[$session_fakeopenid_name]))->find(); if ($userinfoData) { $fakeUserinfoData = $userinfoModel->where(array("token" => $this->token, "wecha_id" => $token_info["openid"], "fakeopenid" => $token_info["openid"]))->find(); if ($fakeUserinfoData) { if ($userinfoModel->where(array("id" => $fakeUserinfoData["id"]))->save($this->_mergeUserinfo($userinfoData, $fakeUserinfoData))) { $userinfoModel->where(array("id" => $userinfoData["id"]))->delete(); } } else { $userinfoModel->where(array("id" => $userinfoData["id"]))->setField("fakeopenid", $token_info["openid"]); } } else { $fakeUserinfoData = $userinfoModel->where(array("token" => $this->token, "wecha_id" => $token_info["openid"], "fakeopenid" => $token_info["openid"]))->find(); if ($fakeUserinfoData) { $userinfoModel->where(array("id" => $fakeUserinfoData["id"]))->setField("wecha_id", $_SESSION[$session_fakeopenid_name]); } } $this->wecha_id = $_SESSION[$session_fakeopenid_name]; } else { $fansInfo = M("Userinfo")->where(array("token" => $this->token, "fakeopenid" => $token_info["openid"]))->find(); if ($fansInfo) { $this->wecha_id = $fansInfo["wecha_id"]; } } } if ($this->wxuser["oauthinfo"] && (MODULE_NAME != "Index")) { $jsonui = $apiOauth->get_fans_info($token_info["access_token"], $token_info["openid"]); if (isset($jsonui["openid"]) && $jsonui["openid"]) { if ($fansInfo) { $exist = $fansInfo["id"]; $issub = $fansInfo["issub"]; } else { $existInfo = M("Userinfo")->where(array("token" => $this->token, "wecha_id" => $this->wecha_id))->find(); $issub = $existInfo["issub"]; $exist = $existInfo["id"]; } $datainfo["wechaname"] = str_replace(array("'", "\\"), array(""), $jsonui["nickname"]); $datainfo["sex"] = $jsonui["sex"]; $datainfo["portrait"] = $jsonui["headimgurl"]; $datainfo["token"] = $this->token; $datainfo["wecha_id"] = $jsonui["openid"]; $datainfo["city"] = $jsonui["city"]; $datainfo["province"] = $jsonui["province"]; $datainfo["truename"] = $datainfo["wechaname"]; $datainfo["wecha_id"] = $this->wecha_id; if ($fake) { $datainfo["fakeopenid"] = $jsonui["openid"]; } if (3 == $wexintype) { $datainfo["fakeopenid"] = ""; $datainfo["issub"] = $this->_issubService($datainfo["wecha_id"]); } if ($exist) { D("Userinfo")->where(array("id" => $exist))->save($datainfo); } else { D("Userinfo")->add($datainfo); } } else { $this->error("授权不对哦,请重置您的appsecret!<br>" . $this->wxuser["appid"] . "<br>" . $this->wxuser["appsecret"] . "<br>" . $jsonui["errcode"], "#"); exit(); } } if (empty($this->wxuser["oauthinfo"]) && (MODULE_NAME != "Index")) { if ($fansInfo) { $exist = $fansInfo["id"]; } else { $existInfo = M("Userinfo")->where(array("token" => $this->token, "wecha_id" => $this->wecha_id))->find(); $exist = $existInfo["id"]; } $datainfo["token"] = $this->token; $datainfo["wecha_id"] = $this->wecha_id; if ($fake) { $datainfo["fakeopenid"] = $token_info["openid"]; } if (3 == $wexintype) { $datainfo["fakeopenid"] = ""; $datainfo["issub"] = $this->_issubService($datainfo["wecha_id"]); } if ($exist) { D("Userinfo")->where(array("id" => $exist))->save($datainfo); } else { D("Userinfo")->add($datainfo); } } $_SESSION[$session_openid_name] = $this->wecha_id; $_SESSION[$session_oauthed_name] = 1; cookie("oauth2_" . $this->token, array("wap_token" => $this->token, "wecha_id" => $this->wecha_id, "appid" => $this->wxuser["appid"]), 311040000); } else { $this->wecha_id = $this->_get("wecha_id"); if ($fake && $toAuth && !isset($_GET["isappinstalled"])) { $_SESSION[$session_fakeopenid_name] = $this->wecha_id; } if (!$toAuth) { $_SESSION[$session_openid_name] = $this->wecha_id; } if (isset($_GET["wecha_id"]) && strlen($_GET["wecha_id"]) && $toAuth) { $get_parms = $_GET; unset($get_parms["wecha_id"]); $get_parm_str = ""; if ($get_parms) { $comma = ""; foreach ($get_parms as $gpk => $gpv ) { $get_parm_str .= $comma . $gpk . "=" . $gpv; $comma = "&"; } } $get_parm_str .= "&g=" . GROUP_NAME . "&m=" . MODULE_NAME . "&a=" . ACTION_NAME; $_SESSION[$session_reopenid_name] = $this->wecha_id; header("Location:" . $this->siteUrl . "/index.php?" . $get_parm_str); exit(); } } } } else { $this->wecha_id = $_SESSION[$session_openid_name]; } if ($_GET["yundabao"] == 1) { cookie("yundabao", "1", 31536000); } $yundabao = cookie("yundabao"); if ($yundabao != "1") { if ($this->wecha_id && !preg_match("/^[0-9a-zA-Z_\-\s]{3,82}$/", $this->wecha_id)) { exit("error openid:" . $this->wecha_id); } }
它就是有时输出 error openid:" 这一行的东西,有时又输出 no token ,然后不知道怎么有时又跳回首页,

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),