PDA

View Full Version : سوال: استفاده از کوکی و سیشن



mehran788
یک شنبه 15 دی 1392, 22:59 عصر
سلام. خسته نباشید
من تو سایتم از کوکی و سیشن اسستفاده کردم که وقتی تو کامپیوتر و با ومپ سرور اجرا می کنم درستن ولی وقتی تو سرور هست خطا میده و کار نمی کنه.
مثلا این خطایی هست که واسه سیشن میده
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home3/labtopsh/public_html/insert.php:33) in /home3/labtopsh/public_html/insert.php on line 98


این هم کدم


<?php
if(!isset($_SESSION)) {
session_start();
}
if (empty($_POST['txtemail']) || empty($_POST['txtname']) || empty($_POST['txtfamilyname']) || empty($_POST['txtpassword']) || empty($_POST['txtphone']) || empty($_POST['txtaddress']) || empty($_POST['txtusername']) || empty($_POST['txtrepass']) || empty($_POST['txtcaptcha']))
{
echo ('<div id="sup-background">');
echo '<div id="sup-header" class="fs15titr"><h style="margin-right:5px">بروز خطا</h></div>';
echo ('<div id="sup-message" class="fs15r"><h style="margin-right:5px">باید تمامی کادر ها را پر کنید</h></div>');
echo '<div id="sup-message">';
echo '<div id="sup-button" class="fs15"><a href="signup.php">تایید</a></div>';
echo '</br>';
echo '</div>';
echo '</div>';
}
else
{
include_once 'server.ini';
$con=mysql_connect($server,$username,$password);
if (!$con)
{
die('could Not Connect'.mysql_error());
}
mysql_select_db('mydb',$con);
mysql_query('SET NAMES\'utf8\'');
mysql_set_charset('utf8');
$email=$_POST['txtemail'];
$fname=$_POST['txtname'];
$lname=$_POST['txtfamilyname'];
$password=$_POST['txtpassword'];
$repass=$_POST['txtrepass'];
$phonenumber=$_POST['txtphone'];
$username=$_POST['txtusername'];
$count=mysql_query("select username from tbluserdata where Username='".$username."'",$con);
if (mysql_num_rows($count)==0)
{
if ($repass==$password)
{
if ($_POST['txtcaptcha']==$_SESSION["captcha"])
{
mysql_query("INSERT INTO `mydb`.`tbluserdata` (`Name`, `Family`, `Username`, `Password`, `Phone`, `Email`, `Address`) VALUES ('".$lname."', '".$fname."', '".$username."', '".$password."', '".$phonenumber."', '".$email."', '".$_POST['txtaddress']."')",$con);
echo '<div id="sup-background">';
echo '<div id="sup-header" class="fs15titr">عضویت تکمیل شد</div>';
echo '<div id="sup-message" class="fs30g">'.$username.'</div>';
echo '<div id="sup-message" class="fs15r">نام:</div>';
echo '<div id="sup-message" class="fs15r">'.$fname.'</div>';
echo '<div id="sup-message" class="fs15r">نام خانوادگی:</div>';
echo '<div id="sup-message" class="fs15r">'.$lname.'</div>';
echo '<div id="sup-message" class="fs15r">ایمیل:</div>';
echo '<div id="sup-message" class="fs15r">'.$email.'</div>';
echo '<div id="sup-message" class="fs15r">شماره تلفن</div>';
echo '<div id="sup-message">';
echo '<div id="sup-button" class="fs15"><a href="index.php">بازگشت به صفحه اصلی</a></div>';
echo '</br>';
echo '</div>';
echo '</div>';
}
else
{
echo ('<div id="sup-background">');
echo '<div id="sup-header" class="fs15titr"><h style="margin-right:5px">بروز خطا</h></div>';
echo ('<div id="sup-message" class="fs15r"><h style="margin-right:5px">تصویر امنیتی به درستی وارد نشده است</h></div>');
echo '<div id="sup-message">';
echo '<div id="sup-button" class="fs15"><a href="signup.php">تایید</a></div>';
echo '</br>';
echo '</div>';
echo '</div>';
}
}
else
{
echo ('<div id="sup-background">');
echo '<div id="sup-header" class="fs15titr"><h style="margin-right:5px">بروز خطا</h></div>';
echo ('<div id="sup-message" class="fs15r"><h style="margin-right:5px">گذرواژه ها با همدیگر مطابقت ندارد</h></div>');
echo '<div id="sup-message">';
echo '<div id="sup-button" class="fs15"><a href="signup.php">تایید</a></div>';
echo '</br>';
echo '</div>';
echo '</div>';
}
}
else
{
echo ('<div id="sup-background">');
echo '<div id="sup-header" class="fs15titr"><h style="margin-right:5px">بروز خطا</h></div>';
echo ('<div id="sup-message" class="fs15r"><h style="margin-right:5px">این نام کاربری قبلا استفاده شده است</h></div>');
echo '<div id="sup-message">';
echo '<div id="sup-button" class="fs15"><a href="signup.php">تایید</a></div>';
echo '</br>';
echo '</div>';
echo '</div>';
}
mysql_close($con);
}
?>

metal gear solid 4
یک شنبه 15 دی 1392, 23:11 عصر
فایلتون رو بررسی کنید. در اولین خط ممکنه کاراکترهای اضافی اضافه شده باشه. برخی از ادیتورها این کاراکترها رو اضافه میکنند. کاراکتری شبیه به 

دلیل این موضوع هم نوع فایل شماست که UTF-8 with BOM ذخیره شده. نوع فایل رو به UTF-8 Without BOM تغییر بدید. کاراکترهای اضافه رو هم از ابتدای فایلها حذف کنید.

trasilver
یک شنبه 15 دی 1392, 23:30 عصر
اینجا لاین 98 وجود نداره چجور ازش ارور گرفته؟

mehran788
دوشنبه 16 دی 1392, 15:40 عصر
فایلتون رو بررسی کنید. در اولین خط ممکنه کاراکترهای اضافی اضافه شده باشه. برخی از ادیتورها این کاراکترها رو اضافه میکنند. کاراکتری شبیه به 

دلیل این موضوع هم نوع فایل شماست که UTF-8 with BOM ذخیره شده. نوع فایل رو به UTF-8 Without BOM تغییر بدید. کاراکترهای اضافه رو هم از ابتدای فایلها حذف کنید.

این کار رو کردم ولی نتیجه ای نگرفتم متاسفانه. کاراکتر اضافی هم اونجا وجود نداشت.
با UTF-8 WITHOUT BOM ذخیره کردم و دوباره آپلود کردم

mehran788
دوشنبه 16 دی 1392, 15:41 عصر
اینجا لاین 98 وجود نداره چجور ازش ارور گرفته؟

من فقط از کد های php تو اینجا کپی کردم واسه همین. اینجا میشه خط 3. واسه خط سوم خطا میده

mehran788
دوشنبه 16 دی 1392, 15:43 عصر
سایت هم www.laptoponline2013.ir هستش. اگه برید تو قسمت ثبت نام اون تصویر امنیتی چون از سیشن استفاده می کنه. خطا میده و ثبت نمی کنه. در حالی که تو ومپ سرور همش درست کار می کنه

metal gear solid 4
دوشنبه 16 دی 1392, 16:11 عصر
دلیلی نداره دقیقاً کاراکترهای اضافه در همین فایل باشن. ممکنه این فایل رو در فایل دیگه ای include کرده باشید. فایل های دیگه رو هم نوعش رو تغییر بدید.

mehran788
چهارشنبه 18 دی 1392, 09:19 صبح
دلیلی نداره دقیقاً کاراکترهای اضافه در همین فایل باشن. ممکنه این فایل رو در فایل دیگه ای include کرده باشید. فایل های دیگه رو هم نوعش رو تغییر بدید.

من همچین کاراکتر های اضافی تو فایل هام پیدا نکردم حتی برای اینکه مطمئن بشم تمام فایل ها رو از رو هاست دانلود کردم و notepad++ همشون رو جست و جو کردم ولی هیچی پیدا نکرد. وقتی هم صفحاتم رو تو notepadd++ کانورت می کنم یعنی گزینه convert to utf-8 without bom رو می زنم دیگه کاراکتر های فارسی رو نمی شناسه و با کاراکتر های عجیب و غریب نشون میده.

Unique
چهارشنبه 18 دی 1392, 10:15 صبح
مشکل headers already sent قطعا مربوط میشه به ارسال header بعد از ارسال هر کاراکتری حتی جای خالی ،‌ موضوع هم فقط BOM نیست گرچه متداول ترین هستش ! توی ویندوز این BOM تا اونجا که یادمه نادیده گرفته میشد ولی تا upload میکردی توی معلوم بود !

۱ - تک تک فایل ها را با یک برنامه مثل notepad ++ باز کنید و به صورت Without BOM ذخیره کنید.
۲ - اگه فایلی که داره خطا میده جایی INCLUDE شده باید فایل اصلی را چک کنید که قبل خطی که خطا داده حتی یک space هم نزده باشین ! یا هر کاراکتر.

این مشکل باید از ابتدا به وجود نیاد و باید پیشگیری کرد چون توی بعضی موارد پیدا کردنش دردسر داره ! برنامه نویس هم باید حوصله داشته باشه و بررسیش کنه. سعمی کنید از ابتدا تنظیمات برنامه را روی without BOM بگذارین ! فایل هایی که توی فایل های دیگه include میشه را آخرش را نبندین ( <? نزنین) ،‌ کمی روی شروع کدنویسی یک فایل جدید دقت کنید.

mehran788
پنج شنبه 19 دی 1392, 10:57 صبح
مشکل headers already sent قطعا مربوط میشه به ارسال header بعد از ارسال هر کاراکتری حتی جای خالی ،‌ موضوع هم فقط BOM نیست گرچه متداول ترین هستش ! توی ویندوز این BOM تا اونجا که یادمه نادیده گرفته میشد ولی تا upload میکردی توی معلوم بود !

۱ - تک تک فایل ها را با یک برنامه مثل notepad ++ باز کنید و به صورت Without BOM ذخیره کنید.
۲ - اگه فایلی که داره خطا میده جایی INCLUDE شده باید فایل اصلی را چک کنید که قبل خطی که خطا داده حتی یک space هم نزده باشین ! یا هر کاراکتر.

این مشکل باید از ابتدا به وجود نیاد و باید پیشگیری کرد چون توی بعضی موارد پیدا کردنش دردسر داره ! برنامه نویس هم باید حوصله داشته باشه و بررسیش کنه. سعمی کنید از ابتدا تنظیمات برنامه را روی without BOM بگذارین ! فایل هایی که توی فایل های دیگه include میشه را آخرش را نبندین ( <? نزنین) ،‌ کمی روی شروع کدنویسی یک فایل جدید دقت کنید.

من همین کارو کردم ولی وقتی فایلی رو به utf-8 widthout BOM تغییر میدم دیگه کاراکتر های فارسی رو پشتیبانی نمی کنه و حروف فارسی رو درست نمی ندازه. نمی دونم چیکار کنم

Unique
پنج شنبه 19 دی 1392, 10:59 صبح
غیر ممکنه ! لطفا فایل را بگذارین تا خودم یا بچه ها چک کنیم. هم فایل اصلی و هم فایلی که شما without BOM کردین.

sh.n.n786
پنج شنبه 19 دی 1392, 12:03 عصر
درود و...
اين چيزي كه شما ميگيد ممكن نيست دوستان گفتند كاركتر اضافه قبل از header اومده.
بعد از تگ PHP اينو اضافه كنيد


<?php
ob_start();

و قبل از بسته شدن تگ PHP اينو اضافه كنيد


ob_end_flush();

مطمئنا مورد اول هست و شما قبل از header كاراكتر اضافه داشته باشيد اما اينو هم امتحان كنيد.

mehran788
پنج شنبه 19 دی 1392, 16:30 عصر
غیر ممکنه ! لطفا فایل را بگذارین تا خودم یا بچه ها چک کنیم. هم فایل اصلی و هم فایلی که شما without BOM کردین.

این فایل اصلی https://drive.google.com/file/d/0B9BqtQuVsRWeUnA1VGdwSHU2RHM/edit?usp=sharing
فایل without bom هم اینه https://drive.google.com/file/d/0B9BqtQuVsRWednhlVVlzQTdkekE/edit?usp=sharing

حتی آپلود هم کردم

http://www.laptoponline2013.ir/aboutus.php این صفحه درباره ما با utf8
http://www.laptoponline2013.ir/aboutustest.php این صفحه درباره ما با utf8 widthout bom
البته من صفحه درباره ما رو به عنوان تست قرار دادم وگرنه همه اینطوریه
من واسه تبدیل هم تو notepad++ از منوی encode گزینه encode in utf-8 widthout bom رو می زنم حتی واسه محکم کاری convert to utf-8 widthout bom رو هم زدم ولی فرقی نکرد

mehran788
پنج شنبه 19 دی 1392, 16:31 عصر
درود و...
اين چيزي كه شما ميگيد ممكن نيست دوستان گفتند كاركتر اضافه قبل از header اومده.
بعد از تگ PHP اينو اضافه كنيد


<?php
ob_start();

و قبل از بسته شدن تگ PHP اينو اضافه كنيد


ob_end_flush();

مطمئنا مورد اول هست و شما قبل از header كاراكتر اضافه داشته باشيد اما اينو هم امتحان كنيد.

خیلی ممنون ولی این رو هم امتحان کردم درست نشد

Unique
پنج شنبه 19 دی 1392, 22:57 عصر
باید از meta زیر توی head حتما بعد از بر داشتن BOM استفاده کنید :


<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

mehran788
جمعه 20 دی 1392, 22:38 عصر
من اینکارو هم کردم. حتی کد PHP رو خط به خط بررسی کردم ولی باز همون مشکل هست :گریه:

MMSHFE
جمعه 20 دی 1392, 23:07 عصر
1- همه فایلهای PHP روی سایتتون رو با کدگذاری UTF-8 without BOM ذخیره کنید. دقت کنید که با UTF-8 معمولی فرق داره و بهتره از ادیتورهایی مثل ++Notepad برای اینکار استفاده کنید (منوی Encoding و گزینه Convert to UTF-8 without BOM) و فایلها رو دوباره آپلود کنید. حتی بهتره با افزونه NppFTP توی خود ++NP فایلها رو مستقیماً روی خود سرور Edit کنید).
2- اگه فایلتون HTML5 هست، تگ زیر:

<meta charset="utf-8" />و درغیر اینصورت تگ زیر:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />رو توی قسمت head صفحه بگذارین.
3- توی دیتابیس هم اگه فارسی ذخیره میکنید، حتماً Collation رو utf8_bin یا utf8_general_ci یا utf8_persian_ci بگذارین و همیشه بعد از اتصال به MySQL و انتخاب دیتابیس، دو دستور زیر رو اجرا کنید:


mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');

البته مورد 2 و 3 برای نمایش صحیح حروف فارسی بعد از تغییر کدگذاری صفحه است و برای کارکردن درست کوکی یا سشن همون مورد 1 کافیه
4- توی بعضی سرورها باز هم با وجود انجام کارهای فوق، مشکل پابرجاست که بخاطر تنظیمات غیرصحیح سروره ولی بهرحال راه حلش اینه که توی همه سورس کدهای PHP کارهای زیر رو انجام بدین:
الف) با کلید Ctrl+Home به اولین کارکتر فایل رفته و کد زیر رو تایپ کنید:

<?php ob_start(); ?>
ب) با کلید Ctrl+End به آخرین کارکتر فایل رفته و کد زیر رو تایپ کنید:

<?php ob_end_flush(); ?>

mehran788
یک شنبه 22 دی 1392, 10:30 صبح
خیلی ممنون آقای شهرکی
خیلی ممنون از همتون که وقت گذاشتید
بالاخره حل شد