為什麼我的網站登入頁在本地測試可以正常登入,在伺服器卻無法正常跳轉呢?
回複討論(解決方案)
LoginAction.class.php的代碼:
...class LoginAction extends GlobalAction { public function _initialize() { parent::_initialize(); if (isset($_SESSION['uid']) && $_SESSION['uid'] && strtolower(ACTION_NAME) != 'logout') { $this->redirect("Usercontent/index"); } } /** * 顯示登陸介面 */ public function index() { $back = $_SERVER['HTTP_REFERER']; if (!$back || strpos(strtolower($back), 'login') !== false || strpos(strtolower($back), 'register') !== false) { $back = U('Usercontent/index'); } $_SESSION['back'] = $back; $this->display(); } /** * 處理使用者登陸 */ public function login() { $username = I("post.name", '', 'trim'); $password = I("pass", '', 'fix_pass'); $c_username = $_COOKIE['username']; if ($c_username != $username) { setcookie('username', $username); } $_SESSION['login_time'] = intval($_SESSION['login_time']) + 1; if ($_SESSION['login_time'] > 3 && md5(I('verify', '', 'strtolower')) != $_SESSION['verify']) { $this->forword('驗證碼錯誤!'); } if (I("name") == null || I("pass") == null) { $this->forword('使用者名稱或密碼不可為空'); } $map["u_username|u_email|u_phone"] = $username; $map["u_password"] = $password; $user = M("user")->where($map)->find(); $this->doLogin($user); }/** * 執行登陸 * * @param type $user */ public function doLogin($user) { if (!empty($user)) { if ($user['u_status'] != 1) { $this->forword('使用者已經被凍結'); } //檢查是否在異地登陸 if ($this->checkedRemoteLogin($user['id'])) { $this->forword('請不要重複登陸!'); } $this->bind($user['id']); $logId = $this->logLogin($user); $user['logId'] = $logId; $this->setSession($user); unset($_SESSION['login_time']); unset($_SESSION['errorMsg']); $back = $_SESSION['back']; unset($_SESSION['back']); if (!$back) { $back = U('Usercontent/index'); } if (strpos(strtolower($back), 'eintro') !== false) { $back = U('Fund/asset'); } if (!$back || strpos(strtolower($back), 'login') !== false || strpos(strtolower($back), 'register') !== false) { $back = U('Usercontent/index'); } header("Location:" . $back); } else { $this->forword('使用者名稱或密碼錯誤'); } } /** * 綁定第三方平台 */ public function bind($uid) { $status3 = true; if ($_SESSION['thirdPartyUserId'] && !A('Register')->hasBind($_SESSION['thrid_party_type'])) { $data['uid'] = $uid; $data['third_party_id'] = $_SESSION['thirdPartyUserId']; $data['type'] = $_SESSION['thrid_party_type']; $status3 = M('third_party_bind')->add($data); unset($_SESSION['thirdPartyUserId']); unset($_SESSION['thrid_party_type']); } return $status3; } /** * 記錄登陸日誌 * * @param array $user * @return type */ protected function logLogin(array $user) { $login = D('Login')->insertLogin($user); return $login['insert_id']; } /** * 設定登陸SESSION * * @param type $user */ protected function setSession($user) { $_SESSION["username"] = $user["u_username"]; $_SESSION["uid"] = $user["id"]; $_SESSION["login_time"] = time(); $_SESSION['online_time'] = time(); $_SESSION['logId'] = $user['logId']; }...
url 重寫沒有生效
url 重寫沒有生效
嗯,為什麼沒生效呢? 別的偽靜態有生效啊
.htaccess檔案:
RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
本地是windows7 32位+php now環境
伺服器是LINUX+wdcp伺服器/虛擬機器主機管理系統
還可能是 session 無效
問題查出來了,是控制器的最後一句語句不起作用:
header("Location:" . $back);
而$back = ‘/usercontent-index.html’
這個語句不知怎的在本地可以跳轉,在網站上卻不行
改成這樣也不行啊:
$strs = explode('.',$back); $this->redirect($strs[0]);
前面的代碼:
if (!$back) { $back = U('Usercontent/index'); } if (strpos(strtolower($back), 'eintro') !== false) { $back = U('Fund/asset'); } if (!$back || strpos(strtolower($back), 'login') !== false || strpos(strtolower($back), 'register') !== false) { $back = U('Usercontent/index'); }
不對!
http://www.onloan.com.cn/usercontent-index.html
會轉到
http://www.onloan.com.cn/login-index.html
所以要麼是登入程式有問題(無法確認是使用者),要麼是 session 失效
session儲存目錄可寫?
fwrite($fp,'username: ',$_SESSION['username']); 這句無法輸出
session儲存目錄可寫?
session儲存在什麼目錄?
session儲存目錄可寫?
session.save_path = "/tmp"
/tmp的許可權是drwxrwxrwt
我清空了/tmp目錄,重啟了伺服器,還是不行。
大麥加油!關注、學習!
\ThinkPHP\Common\functions.php
$name['path'] = "/Runtime"; //thinkphp目錄下if(isset($name['path'])) session_save_path($name['path']);
這樣寫對嗎?
樓上這樣設本地都無法登入了,
暈死,是PHP版本的問題,以下同樣的代碼,本地返回true,伺服器返回false,
跟蹤結果,同樣是SESSION為空白
protected function isLogin() {if (!empty($_SESSION['username']) && !empty($_SESSION['uid'])) { $this->updateOnlineTime(); return true; } else { return false; }}
$fp = fopen('./qerr26.txt','w+'); fwrite($fp,'ok'); session_start(); $_SESSION['XXX'] ='123'; fwrite($fp,'SESSIONXXX: ',$_SESSION['XXX']); fwrite($fp,'username: ',$_SESSION['username']); fwrite($fp,'uid: ',$_SESSION['uid']); fclose($fp);
結果是:
okSESSIONXXX: uid:
奇怪,username:沒輸出
也可能是你的伺服器 php 版本低了
$url = 'http://www.onloan.com.cn/usercontent-index.html';print_r(get_headers($url));echo file_get_contents($url);
Array( [0] => HTTP/1.1 200 OK [1] => Date: Sun, 05 Oct 2014 05:57:52 GMT [2] => Content-Type: text/html [3] => Content-Length: 265 [4] => Connection: close [5] => Server: nginx/1.0.15 [6] => X-Powered-By: PHP/5.2.17p1)
再有,你的伺服器用的是 nginx
能支援 .htaccess 嗎?
再有,你的伺服器用的是 nginx
能支援 .htaccess 嗎?
伺服器支援 .htaccess
我本地PHP版本是5.0,調試登入沒問題
伺服器PHP是5.2版本,那代碼要怎麼改呢?謝謝!
你在登入頁列印一下傳入的參數看看
這樣無目標的瞎猜是沒有用的
你在登入頁列印一下傳入的參數看看
這樣無目標的瞎猜是沒有用的
謝謝版主,
$map["u_username|u_email|u_phone"] = $username; $map["u_password"] = $password; $user = M("user")->where($map)->find(); $fp = fopen('./qerr28.txt','w+'); fwrite($fp,'username: ',$user["u_username"]); fwrite($fp,'uid: ',$user["id"]); fclose($fp);
本地和伺服器qerr28.txt輸出的內容都只有:
uid:
這個M方法怎麼進一步跟蹤呢?
我不知道到哪裡看TRACE的跟蹤資訊,在哪個目錄的哪個記錄檔裡?
20樓的代碼有錯,更正為:
$map["u_username|u_email|u_phone"] = $username; $map["u_password"] = $password; $user = M("user")->where($map)->find(); $fp = fopen('./qerr28.txt','w+'); fwrite($fp,' username: ' . $user["u_username"]); fwrite($fp,' uid: ' . $user["id"]); fclose($fp);
本地和伺服器qerr28.txt都輸出:
$user: Array username: mikeccn uid: 4
BaseAction.class.php中:
protected function isLogin() { //cjq add $fp = fopen('./qerr26.txt','w+'); fwrite($fp,'ok'); $_SESSION['XXX'] ='123'; fwrite($fp,' SESSIONXXX: ' . $_SESSION['XXX']); fwrite($fp,' username: ' . $_SESSION['username']); fwrite($fp,' uid: ' . $_SESSION['uid']); fclose($fp);
本地qerr26.txt輸出:
ok SESSIONXXX: 123 username: mikeccn uid: 4
伺服器qerr26.txt輸出:
ok SESSIONXXX: 123 username: uid:
這是為什麼呢?伺服器跨頁面SESSION丟失,這是什麼導致的呢?(本地跨頁面SESSION沒丟失)
php.ini 中 session.auto_start 的值是什嗎?
儲存session的變數沒有成功,有可能是php版本問題,對於session 環境參數設定可能不一樣,通過php5.0 php5.2對比session環境變數參數。
php.ini 中 session.auto_start 的值是什嗎?
session.auto_start = 0 改成1就OK了,十分感謝!
相對路徑的問題?
不是吧