首页  >  文章  >  后端开发  >  THINKPHP网站登录页在本地测试可以正常登录,在服务器却无法正常跳转

THINKPHP网站登录页在本地测试可以正常登录,在服务器却无法正常跳转

WBOY
WBOY原创
2016-06-23 13:48:08652浏览

为什么我的网站登录页在本地测试可以正常登录,在服务器却无法正常跳转呢?

<form action="{:U('Login/login')}" method="post">                        <ul>                            <li><img src="__PUBLIC__/frontend/images/login_name_bg.gif" alt=""  title="用户名"/>                                <input type="text" class="denglu_srk" placeholder="用户名/邮箱/手机号" value="<?php echo $_COOKIE['username'];?>"  name="name"    style="max-width:90%"/>                            </li>                            <li><img src="__PUBLIC__/frontend/images/login_password_bg.gif" alt=""  title="密码"/>                                <input type="password" class="denglu_srk" placeholder="密码" onpaste="return false" name="pass" id="pass_id"    style="max-width:90%"/>                            </li>                            <?php if($_SESSION['login_time']>=3):?>                            <li><input placeholder="输入验证码" class="yanzhengma" name="verify"/><img  class="verify-code" src="{:U('Register/verify')}" onClick="click_change(this)"   style="max-width:90%" title="验证码"/ alt="THINKPHP网站登录页在本地测试可以正常登录,在服务器却无法正常跳转" ><b id="verify1"></b></li>                            <?php endif;?>                        </ul>                        <p><a href="{:U('FindPass/email')}">忘记密码?</a><a href="{:U('Register/index')}">免费注册</a></p>                        <div class="denglu_but_con"><input class="denglu_but" type="submit" value=" "/></div>                    </form>



回复讨论(解决方案)

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文件:
<IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]</IfModule>

本地是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)<head><meta property="qc:admins" content="147026777767647166375636" /><meta property="qc:admins" content="4716300527622221636375" /><meta property="qc:admins" content="471630043674556654" /></head><meta http-equiv='Refresh' content='0;URL=/login-index.html'>

再有,你的服务器用的是 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了,十分感谢!

相对路径的问题?
不是吧

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn