PDA

View Full Version : سوال: مشکل در فرم لاگین



Farzadak2010
شنبه 14 تیر 1393, 13:23 عصر
سلام، خسته نباشید من یه اسکریپت نوشتم که فایل لاگینش روی هاست درست کار نمیکنه حتی از UTF-8 without BOM هم استفاده کردم چندین بار اما درست نشد. روی لوکال توی ومپ سرور کار میکنه و مشکلی نداره اما روی هاست خطای زیر رو میده اینم لینکش روی هاست : http://valanet.ir/wp/admin/ فایل پروژه ضمیمه شده valanet.ir/wp/admin
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home3/irania21/public_html/wp/admin/index.php:1) in /home3/irania21/public_html/wp/admin/login_checker.php on line 1 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home3/irania21/public_html/wp/admin/index.php:1) in /home3/irania21/public_html/wp/admin/login_checker.php on line 1  

محتویات فایل login_checker.php :



<?php session_start();
ob_start();

require_once 'config.php';
// Agar logincheck = 1 bashe forme login neshon dade mishe va agar 0 bashe login check nemishe

if ($logincheck == 1) {

// show login form
function showLoginPasswordProtect($error_msg) {

$code= '

<h3>
<font color="red">' . $error_msg .'</font>

</h3>
<br />
<form id="login" class="form-horizontal" method="POST"> <br />

<fieldset>
<div class="control-group">
<label class="control-label" for="username">نام کاربري</label>
<div class="controls">
<input type="text" class="input-large ltr" id="username" name="username" value="">
</div> <!-- /controls -->
</div> <!-- /control-group -->
<div class="control-group">
<label class="control-label" for="password">کلمه عبور</label>
<div class="controls">
<input type="password" class="input-large ltr" id="password" name="password" value="">
</div> <!-- /controls -->
</div> <!-- /control-group -->
<div class="form-actions">
<button type="submit" name="submit_login" class="btn btn-primary">ورود</button>
</div> <!-- /form-actions -->
</fieldset>
</form>';




echo theme("ورود به پنل مدیریت" ,$code ) ;


// stop at this point
die();
exit();
}


global $session;




if(!isset($_SESSION['administrator'])){
if(isset($_POST['submit_login'])){
$username = addslashes(htmlspecialchars($_POST['username']));
$password = addslashes(htmlspecialchars($_POST['password']));
$uap = $username . $password;
if(($username == $admin_username) && ($password == $admin_password)){

$_SESSION['administrator'] = $admin_username;
// setcookie('administrator',$uap,time()+(3600));
}else{

showLoginPasswordProtect('<div id=error>نام کاربری و رمز عبور شما اشتباه هست</div><br />');

}
}
}





if(isset($_SESSION['administrator'])){


}

// agar user login nashode bod forme login neshon dade mishe az tarighe code zir
if(!isset($_SESSION['administrator'])){
showLoginPasswordProtect("");
}

// agar user roye linke khoroj click kard va etelaati dar hale ersal nabod az site kharej mishavad
if(isset($_GET['logout']) && !isset($_POST['submit_login']) && !isset($_POST['savechanges'])) {

$_SESSION['administrator'] = NULL;
session_destroy();
// setcookie('administrator','',time()-(9600));
showLoginPasswordProtect("شما با موفقیت خارج شدید.");
}


ob_end_flush();


}

?>


ممنون از کمکتون فایل
پروژه اتچ شده: 120800

H:Shojaei
شنبه 14 تیر 1393, 14:47 عصر
سلامحالا من دقیقا یادم نیست ولی فک کنم باید ob_start() رو قبل از هر چیزی بیارید اینم یه تست بکنید شاید شد...

Farzadak2010
شنبه 14 تیر 1393, 14:58 عصر
تست شد
حل نشد

Mohammadsgh
شنبه 14 تیر 1393, 15:04 عصر
شما پیش از
session_start();
نباید هیچ تگ یا خروجی داشته باشید تابع سیشن استارت رو بالای بالای صفحه تون بزارید.ببینید درست میشه؟:لبخندساده:

vahidqara
شنبه 14 تیر 1393, 18:49 عصر
شما پیش از
session_start();
نباید هیچ تگ یا خروجی داشته باشید تابع سیشن استارت رو بالای بالای صفحه تون بزارید.ببینید درست میشه؟:لبخندساده:

موافقم... :لبخندساده:

Farzadak2010
شنبه 14 تیر 1393, 20:59 عصر
توی انجمن به این صورت نمایش داده شده وگرنه کد فایل از ?

Mohammadsgh
شنبه 14 تیر 1393, 21:53 عصر
الان درست شد؟

poriab
شنبه 14 تیر 1393, 22:03 عصر
قبل از تگ آغازین شامل محتویات بود
این رو چک کنید حتما درست شده
دانلود : http://www.uplooder.net/cgi-bin/dl.cgi?key=7f24ee00b15d20978a21fe13c5d95614

* فقط فایل رو خواستید باز کنید با Notepad++ باز کنید تا دوباره محتویات اضافه در ابتدای کد اضافه نشه

Farzadak2010
یک شنبه 15 تیر 1393, 00:15 صبح
خیر هنوز مشکل حل نشده ، دوستان راهی که به کوکی و سسشن احتیاج نداشته باشه سراغ دارند که حداقل امنیت کمی داشته باشه؟ جز اینکه اگر نام کاربری و رمز عبور درست بود به صفحه مدیریت بره و اصلا چیزی چک نشه

H:Shojaei
یک شنبه 15 تیر 1393, 02:54 صبح
تابع session_start() رو داخل این شرط بذارید ببینید درست میشه:--------if(session_status()!=PHP_SESSION_ACTIVE) session_start()---------اگه این نشد یه بار هم session-destroy() رو تو خط اول اجرا کنید شاید شد.---------راستی اینم بگم که ob_start() استثناست که باید قبل session-start() قرار بگیره...--------واسه اثباتش میتوید تو این پیج session رو سرچ کنید تا ببینید قبلش اومده یا بعدش... ---------http://www.php.net/manual/en/function.ob-start.phpموفق باشید...

Farzadak2010
یک شنبه 15 تیر 1393, 03:19 صبح
جناب H:Shojaei
ممنون از پاسخ شما اما خطای زیر رو داد


Fatal error: Call to undefined function session_status() in /home3/irania21/public_html/wp/admin/login_checker.php on line 1

من کد لاگین رو کاملا عوض کردم و به شکل زیر شد اما باز هم همون خطای قبلی رو میده

خطا :


Warning: Cannot modify header information - headers already sent by (output started at /home3/irania21/public_html/wp/admin/manager.php:1) in /home3/irania21/public_html/wp/admin/login_checker.php on line 3
Warning: Cannot modify header information - headers already sent by (output started at /home3/irania21/public_html/wp/admin/manager.php:1) in /home3/irania21/public_html/wp/admin/login_checker.php on line 4

کد جدید فایل :


<?php require_once 'config.php';
function askPassword($text="Enter Username And Password") {
header('WWW-Authenticate: Basic realm="'. ($text) .'"');
header('HTTP/1.0 401 Unauthorized');
return 1;
}

if ( (!isset($_SERVER['PHP_AUTH_USER'])) && (!isset($_SERVER['PHP_AUTH_USER'])) ) {
echo( theme("تنظیمات کانکشن" , 'لطفا صفحه را مجددا رفرش کنید و نام کاربری و رمز عبور صحیح را وارد نمایید' ));
askPassword();
exit;
} else {

if ( ($admin_username == $_SERVER['PHP_AUTH_USER']) AND ($admin_password == $_SERVER['PHP_AUTH_PW']) ) {
// User Logged in
} else {
echo( theme("تنظیمات کانکشن" , 'لطفا صفحه را مجددا رفرش کنید و نام کاربری و رمز عبور صحیح را وارد نمایید' ));
askPassword();
exit;
}
}

if( (isset($_GET['logout']) || isset($_POST['logout']) ) && !isset($_POST['submit_login']) && !isset($_POST['savechanges'])) {
askPassword();
header( "refresh:2;url=index.php" );
}

Mohammadsgh
یک شنبه 15 تیر 1393, 10:18 صبح
فرم لاگین سیشن داشته باشه بهتره,شما همون کد پیشینتون رو خط یکش رو اینجوری ویرایش کنید


if(!isset(session_start()) {
session_start()
}

sooren_66
یک شنبه 15 تیر 1393, 10:50 صبح
این کد رو امتحان کنید.
فرم لاگین:



<?php
if( isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) && count($_SESSION['ERRMSG_ARR']) >0 ) {
echo '<ul class="err">';
foreach($_SESSION['ERRMSG_ARR'] as $msg) {
echo '<li>',$msg,'</li>';
}
echo '</ul>';
unset($_SESSION['ERRMSG_ARR']);
}
?>



<form id="loginForm" name="loginForm" method="post" action="login-exec.php">
<table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
<td width="112"><b>Login</b></td>
<td width="188"><input name="login" type="text" id="login" /></td>
</tr>
<tr>
<td><b>Password</b></td>
<td><input name="password" type="password" id="password" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Login" /></td>
</tr>
</table>
</form>
</body>
</html>


چک لاگین:



<?php
session_start();

require_once('config.php');

$errmsg_arr = array();
$errflag = false;

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('خطا در برقراری ارتباط با سرور: ' . mysql_error());
}

$db = mysql_select_db(DB_DATABASE);
if(!$db) {
die("سرور قادر به انتخاب دیتابیس نیست");
}

function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}

$login = clean($_POST['login']);
$password = clean($_POST['password']);

if($login == '') {
$errmsg_arr[] = 'نام کاربری اشتباه است';
$errflag = true;
}
if($password == '') {
$errmsg_arr[] = 'پسورد اشتباه است';
$errflag = true;
}

if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: login-form.php");
exit();
}

$qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
$result=mysql_query($qry);

if($result) {
if(mysql_num_rows($result) == 1) {
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
$_SESSION['SESS_LAST_NAME'] = $member['lastname'];
session_write_close();
header("location: enter-user.php");

exit();
}else {
header("location: login-failed.php");
exit();
}
}else {
die("Query failed");
}
?>

Farzadak2010
دوشنبه 16 تیر 1393, 03:05 صبح
سلام
نمیدونم چرا اما برنامه من حتی امکان ارسال

header("location: login-failed.php");
رو هم نداره

برای همین بیخیال متد های متداول شدم و از متد Get و Post برای پسورد استفاده کردم و پسورد هم بصورت MD5 ذخیره میشه

سورس اسکریپت رو پیوست کردم

این هم دمو

نام کاربری : admin
رمز عبور : 123456

http://valanet.ir/getlogin/admin

ممنون از دوستان ولی کلا اسکریپت من نمیتونه هدر ها رو ارسال کنه به همین دلیل نه سسشن کار میکنه نه از هدر هایی مثل زیر میشه برای تشخیص هویت استفاده کرد



header('WWW-Authenticate: Basic realm="'. ($text) .'"'); header('HTTP/1.0 401 Unauthorized');

#Elahe#
دوشنبه 16 تیر 1393, 13:22 عصر
یکی از دوستان همچین مشکلی داشت
کاشف به عمل اومد که مشکل از بسته بودن بافر خروجی رو سروره
از پشتیبانی بپرسید ببینید output_buffering باز هست رو سرورهاشون یا نه

Farzadak2010
دوشنبه 16 تیر 1393, 23:42 عصر
بله باز هست
از طرفی اسکریپت هایی مانند فرییر ، وردپرس ، جوملا ، ویبالتین
به راحتی کار میکنند و مشکلی هم ندارند و فقط اسکریپت من این مشکلات رو داره و کل اینترنت رو هم سرچ کردم
و تمام قوانینی که گفته بودند رو استفاده کردم اما هیچ کدام مشکل رو حل نکرد.