为什么我的网站登录页在本地测试可以正常登录,在服务器却无法正常跳转呢?
1 | <form action= "{:U('Login/login')}" method= "post" > <ul> <li><img src= "/static/imghw/default1.png" data-src= "__PUBLIC__/frontend/images/login_name_bg.gif" class = "lazy" alt= "" title= "用户名" /> <input type= "text" class = "denglu_srk" placeholder= "用户名/邮箱/手机号" value= "<?php echo $_COOKIE['username'];?>" name= "name" style= "max-width:90%" /> </li> <li><img src= "/static/imghw/default1.png" data-src= "__PUBLIC__/frontend/images/login_password_bg.gif" class = "lazy" 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 lazy" src= "/static/imghw/default1.png" data-src= "{:U('Register/verify')}" 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的代码:
1 | ... 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 ); } public function doLogin( $user ) { if (! empty ( $user )) { if ( $user [ 'u_status' ] != 1) { $this ->forword( '用户已经被冻结' ); }
|
로그인 후 복사
url 重写没有生效
url 重写没有生效
嗯,为什么没生效呢? 别的伪静态有生效啊
.htaccess文件:
1 | <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’
这个语句不知怎的在本地可以跳转,在网站上却不行
改成这样也不行啊:
1 | $strs = explode ( '.' , $back ); $this ->redirect( $strs [0]);
|
로그인 후 복사
前面的代码:
1 | 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
1 | $name [ 'path' ] = "/Runtime" ;
|
로그인 후 복사
这样写对吗?
楼上这样设本地都无法登录了,
晕死,是PHP版本的问题,以下同样的代码,本地返回true,服务器返回false,
跟踪结果,同样是SESSION为空
1 | protected function isLogin() { if (! empty ( $_SESSION [ 'username' ]) && ! empty ( $_SESSION [ 'uid' ])) { $this ->updateOnlineTime(); return true; } else { return false; }}
|
로그인 후 복사
1 | $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 版本低了
1 | $url = 'http://www.onloan.com.cn/usercontent-index.html' ;print_r(get_headers( $url )); echo file_get_contents ( $url );
|
로그인 후 복사
1 | 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版本,那代码要怎么改呢?谢谢!
你在登录页打印一下传入的参数看看
这样无目标的瞎猜是没有用的
你在登录页打印一下传入的参数看看
这样无目标的瞎猜是没有用的
谢谢版主,
1 | $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楼的代码有错,更正为:
1 | $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中:
1 | protected function isLogin() {
|
로그인 후 복사
本地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了,十分感谢!
相对路径的问题?
不是吧