|
|
|
| Добрый вечер!
Сразу оговорюсь что проблема возникает при интеграции своего кода с wordpress
суть проблемы: для не авторизованных пользователей выдается форма авторизации для авторизованных показывается их аккаунт. Проблема в том что некоторые пользователи заходят каким-то образом не в свои аккаунты
Вот куски кода отвечающие за авторизацию:
<?
function OwnStripSlashes($data) убираем экранирующие слеши если включены магические кавычки
{
if(is_array($data))
$data = array_map('OwnStripSlashes', $data);
else
$data = trim(!get_magic_quotes_gpc()?$data:stripslashes($data));
return $data;
}
function GetRealIpAgent() // определение ip пользователя
{
$strRemoteIP = $_SERVER['REMOTE_ADDR'];
if (!$strRemoteIP) { $strRemoteIP = urldecode(getenv('HTTP_CLIENTIP'));}
if (getenv('HTTP_X_FORWARDED_FOR')) { $strIP = getenv('HTTP_X_FORWARDED_FOR'); }
elseif (getenv('HTTP_X_FORWARDED')) { $strIP = getenv('HTTP_X_FORWARDED'); }
elseif (getenv('HTTP_FORWARDED_FOR')) { $strIP = getenv('HTTP_FORWARDED_FOR'); }
elseif (getenv('HTTP_FORWARDED')) { $strIP = getenv('HTTP_FORWARDED'); }
else { $strIP = $_SERVER['REMOTE_ADDR']; }
if ($strRemoteIP != $strIP) { $strIP = $strRemoteIP.", ".$strIP; }
return $strIP.getenv("HTTP_USER_AGENT");
}
if(isset($_POST['go']))//если пользователь хочет авторизироваться
{
$_POST = OwnStripSlashes($_POST);//убираем экранирующие слеши
$name = mysql_real_escape_string($_POST['login']);//подготовка к запросу в мускул
$pass = $_POST['pass'];
$result = mysql_query("SELECT id,login,password FROM users where login='$name'",$db) or die(mysql_error());
if(mysql_num_rows($result)!=1 && mysql_num_rows($result)!=0) {echo "ERROR!!!!"; isset($_SESSION['login'])?session_destroy():"";}
else
{
$row = mysql_fetch_assoc($result);
if($pass !=$row['password']) {session_destroy(); header("Location:?".rand(0,100)); exit;}
if(mysql_num_rows($result)!=0){$_SESSION['login'] = $_POST['login'];$_SESSION['user_id_tr1']=(int)$row['id'];$_SESSION['auth_tr']=1;
$_SESSION['ip'] = md5(GetRealIpAgent());} else session_destroy();
header("Location:?".rand(0,100));exit;
}
}
if(!isset($_SESSION['login']) || empty($_SESSION['login']) || !isset($_SESSION['auth_tr']) || !isset($_SESSION['ip']) || md5(GetRealIpAgent()) != $_SESSION['ip'] || (int)$_SESSION['user_id_tr1'] == 0)//првоер€ем авторизирован пользователь или нет. eсли нет выдаем форму дл€ авторизации
{
?>
<center><form action="#" method="post">
Login:<br />
<input name="login" type="text" />
<br />Password:
<input name="pass" type="password" />
<br> <input name="go" type="submit" value="submit" />
</form><br />
<br /></center>
<center>Not registered? <a href="/signup/">Please Sign up.</a>
</center>
<?php
}
else
{
$res_user = mysql_query("SELECT login,First_name,Last_name,Street_address,City,State,Zip,Country,Primary_telephone,Email,PM,LR,Skype FROM users WHERE id=".(int)$_SESSION['user_id_tr1']);
//ну и дальше выводим результат
|
| |
|
|
|
|
|
|
|
для: tvv123456
(03.10.2011 в 22:56)
| | Помимо session_destroy() добавьте еще на всякий случай unset($_SESSION). | |
|
|
|
|
|
|
|
для: cheops
(04.10.2011 в 09:57)
| | Вообщем как я понял, вордпресс просто подменял $_SESSION['login'] при авторизации
Переименовал переменную, подобных проблем вроде не возникает больше | |
|
|
|