THINKPHP網站登入頁在本地測試可以正常登入,在伺服器卻無法正常跳轉

來源:互聯網
上載者:User
為什麼我的網站登入頁在本地測試可以正常登入,在伺服器卻無法正常跳轉呢?
 



回複討論(解決方案)

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了,十分感謝!

相對路徑的問題?
不是吧

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.