PDA

View Full Version : سوال: چطور می تونم بعد از لاگین، کاربر رو به صفحه قبلی ریدایرکت کنم؟



idocsidocs
دوشنبه 10 بهمن 1390, 22:39 عصر
چطور می تونم بعد از لاگین، کاربر رو به صفحه قبلی ریدایرکت کنم؟

mohsen24000
دوشنبه 10 بهمن 1390, 22:47 عصر
$_SERVER['HTTP_REFERER']
header("Location: $_SERVER['HTTP_REFERER']");

AmirSky
دوشنبه 10 بهمن 1390, 23:12 عصر
فکر کنم بهتر باشه لینک مورد نظر رو در یک سشن تعریف کنیم
چون با روش معمولی به مشکل می خورید
مثلا هنگام رفرش صفحه لینک قبلی به همون پیج لوگین تغییر میکنه و ریدایرکت نمیشه

idocsidocs
سه شنبه 11 بهمن 1390, 00:10 صبح
header("Location: $_SERVER['HTTP_REFERER']");
فرض کنید کاربر لاگین کرد و بعد از یک ساعت یه صفحه رو ریفرش کرد، در این صورت از کنترل پنل خارج می شه. چطور می تونم بعد از لاگین دوباره کاربر رو به همون صفحه بفرستم؟

فکر کنم بهتر باشه لینک مورد نظر رو در یک سشن تعریف کنیمبغیر از سسشن راهی نیست که بشه این مشکل رو برطرف کرد؟ چون سسشن ها هم زمان مشخصی دارن و بعد از اکسپایر شدن سسشن، این خاصیت هم از بین می ره.

amateur_shz
سه شنبه 11 بهمن 1390, 20:05 عصر
تگ meta رو به صورت زیر هر جا خواستی echo کن و آدرس مورد نظرت و مدت زمان انتظار رو توش بنویس
<'meta http-equiv='refresh' content='4;url=../default.php>

idocsidocs
سه شنبه 11 بهمن 1390, 21:04 عصر
تگ meta رو به صورت زیر هر جا خواستی echo کن و آدرس مورد نظرت و مدت زمان انتظار رو توش بنویس
بحث چیز دیگه ای هست !

Bahram0110
پنج شنبه 13 بهمن 1390, 17:08 عصر
referrer صفحه ی لاگین را در سشن ذخیره کنید و پس از لاگین ریدایرکت کنید.

idocsidocs
پنج شنبه 13 بهمن 1390, 18:43 عصر
referrer صفحه ی لاگین را در سشن ذخیره کنید و پس از لاگین ریدایرکت کنید.


سسشن عمر محدودی داره. از طرفی ممکنه کاربر صفحه لاگین رو باز کنه ولی بعد از یک ساعت لاگین کنه و ...

MMSHFE
جمعه 14 بهمن 1390, 10:10 صبح
میتونید توی جدول کاربران، یک فیلد اضافه کنید و یک کد به صفحات اضافه کنید که اگه کاربر لاگین کردن بود و داشت اون صفحه رو میدید، آدرس اون صفحه توی فیلد مذکور بعنوان آخرین صفحه بازدید شده، ذخیره بشه. اینطوری تا وقتی که به صفحه دیگری نره، حتی اگه مرورگر رو ببنده و سشن و... از بین بره، آخرین صفحه رو دارین. این روش چندتا مزیت داره:
1- برخلاف Session، طول عمر نداره و با بسته شدن مرورگر از بین نمیره.
2- برخلاف Cookie، نه تنها طول عمر نداره، بلکه امکان اینکه کاربر خودش اون رو پاک کنه هم نیست.
3- میتونید کاربر رو ردیابی کنید و ببینید برای مثال چند نفر درحال مشاهده یک بخش خاص از سایت هستن.
4- یک فیلد خیلی ساده دارین که فقط تغییر میکنه و بار زیادی روی DB نمیاره.
5- توی صفحات خاصی که میخواین ردیابی نشن، میتونید کد تغییر صفحه رو نگذارین. این صفحات میتونه صفحه لاگین، صفحه خروج، صفحه پروفایل شخصی و... باشه.
6- میتونید به کاربر بعد از لاگین اجازه بدین که به آخرین صفحه ای که بوده بره یا به صفحه اصلی هدایت بشه.
فکر میکنم vBulletin هم از همین روش استفاده میکنه.
موفق باشید.

mbf5923
جمعه 14 بهمن 1390, 10:29 صبح
میتونید به کاربر بعد از لاگین اجازه بدین که به آخرین صفحه ای که بوده بره یا به صفحه اصلی هدایت بشه
کاربر تا قبل از لاگین کردن توی جدول کاربران فیلدش شناسایی نشده پس این اطلاعات قبل از لاگین کجا ذخیره بشه؟

Keramatifar
جمعه 14 بهمن 1390, 10:43 صبح
بهترین روش برای انجام این کار استفاده از متد GET و ReturnURL است
معمولا در هر صفحه ای که باعث هدایت کاربر به صفحه لاگین میشه در انتهای آدرس یک پارامتر به نام ReturnURL=PageName قرار می گیرد و در صفحه لاگین در صورتیکه همچین پارامتری وجود داشت کاربر بعد از لاگین به آن صفحه هدایت می شود و در غیر اینصورت به صفحه پیش فرض
مثلا کاربر را از صفحه admin به لاگین هدایت می کنیم:

header('location: login.php?ReturnURL=admin.php');
و در صفحه لاگین در صورتیکه لاگین صحیح بود:

if(isset($_GET['ReturnURL']))
{
header('location:' . $_GET['ReturnURL']);
}
else
{
header('location: index.php');
}

MMSHFE
جمعه 14 بهمن 1390, 10:45 صبح
در آخرین فعالیت کاربر (لاگین قبلی) آخرین صفحه ای که توش بوده توی این فیلد قرار داره. میتونیم بهش اجازه بدیم به همون صفحه بره. البته میشه این روش رو تکمیل هم بکنیم. برای مثال، توی فرم Login صفحه قبلی رو با استفاده از Referer استخراج کنیم و بعد از لاگین به کاربر اجازه انتخاب برای رفتن به صفحه قبلی (ازطریق Referer)، آخرین صفحه بازدید در لاگین قبلی (ازطریق دیتابیس) یا صفحه اصلی سایت رو بدیم.
موفق باشید.

idocsidocs
جمعه 14 بهمن 1390, 11:01 صبح
میتونید توی جدول کاربران، یک فیلد اضافه کنید و یک کد به صفحات اضافه کنید که اگه کاربر لاگین کردن بود و داشت اون صفحه رو میدید
من می خوام در حالت کلی این کار رو انجام بدم. مثلا فرض کنید کاربر توی سایت من عضو هست ولی لاگین نکرده.
بعد از طریق گوگل وارد صفحه محصولات می شه و برای خرید نیاز به لاگین داره.

در این حالت کاربر باید به صفحه لاگین بره، از اونجا لاگین کنه و از این طریق به صفحه محصولات ریدارکت بشه.

برای این مورد باید چیکار کرد/.

MMSHFE
جمعه 14 بهمن 1390, 11:20 صبح
در این حالت، روشی که جناب کرامتی گفتن، بهترین بازدهی رو داره. کافیه لینکهای هر صفحه به صفحه لاگین رو طوری تنظیم کنید که یک returnURL به صفحه جاری رو برای صفحه لاگین بفرستن و اون صفحه هم بعد از بررسی صحت لاگین و انجام عمل لاگین، کاربر رو به همون صفحه returnURL که به روش GET دریافت کرده، برگردونه. البته بهتره برای امنیت بیشتر، چک کنید که returnURL یک صفحه از سایت خودتون باشه و ثانیاً کاربر اجازه دسترسی به اون صفحه رو داشته باشه تا از این طریق نتونه سطوح دسترسی تعریف شده در سایت رو با ساخت لینکهای سفارشی خودش دور بزنه. موفق باشید.

idocsidocs
جمعه 14 بهمن 1390, 12:15 عصر
بهترین روش برای انجام این کار استفاده از متد GET و ReturnURL استاین روش روش خوبی هست ولی من توی لینکهام از ریرایت مد استفاده کردم و نمی تونم کاراکترهای = ؟ : / رو توی لینک قرار بدم.

بنظرتون بهتر نیست توی فرم لاگین یه فیلد مخفی ایجاد کنم و مقدار ریفر رو توی یه فیلد مخفی ذخیره کنم و بعد از لاگین کاربر رو به اون لینک بفرستم؟

MMSHFE
جمعه 14 بهمن 1390, 12:25 عصر
این روش هم جواب میده ولی ایرادی که داره اینه که کاربران خیلی تمایل ندارن برای انتقال بین صفحات از دکمه ها استفاده بشه و بیشتر از لینک خوششون میاد. ضمناً با ریرایت هم میشه مقادیر get رو بفرستید. کد htaccess. شما چیه که میگین نمیشه؟

idocsidocs
جمعه 14 بهمن 1390, 13:16 عصر
این روش هم جواب میده ولی ایرادی که داره اینه که کاربران خیلی تمایل ندارن برای انتقال بین صفحات از دکمه ها استفاده بشه و بیشتر از لینک خوششون میاد.من این روش رو فقط برای لاگین استفاده می کنم و برای سایر صفحات از این روش استفاده نمی کنم.

کد htaccess. شما چیه که میگین نمیشه؟
من فقط به کاراکترهای حرف عدد - _ . / اجازه دادم.

MMSHFE
جمعه 14 بهمن 1390, 14:17 عصر
خوب وقتی با / میشه، پس راه حل وجود داره. مثال:
htaccess.


RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(php)$
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

حالا فرض کنید چنین آدرسی تایپ بشه:
mysite.com/article/15
و شما اینطوری پردازش کنیدش:


if(isset($_GET['url'])) {
$parts = explode('/', trim($_GET['url'], ' /'));
}

بدین ترتیب، آرایه parts$ اینطوری خواهد بود:


[0] => article
[1] => 15

که میتونید با استفاده از اینها، مقاله 15 رو نشون بدین (این قسمت فقط توضیح چگونگی استفاده از htaccess. مذکور بجای htaccess. خودتون بود).
اما اگه برای لاگین اینطوری لینک بدین:
mysite.com/login/shop
میتونید اینطوری پردازشش کنید:


if(isset($_GET['url'])) {
$parts = explode('/', trim($_GET['url'], ' /'));
if($parts[0] == 'login') {
// show form with hidden input with value of $parts[1].'.php'
}
}

همونطور که میبینید، فرم لاگین شما یک تگ مخفی با مقدار shop.php خواهد داشت که میتونید از اون برای بازگشت استفاده کنید.
البته اگه htaccess. خودتون رو دقیقاً اینجا بگذارین، بهتر میتونم راهنمایی کنم.
موفق باشید.

idocsidocs
جمعه 14 بهمن 1390, 14:55 عصر
خوب وقتی با / میشه، پس راه حل وجود داره. مثال:
htaccess.
چطور می تونم بخش مربوط به آدرس دامنه رو از آدرس حذف کنم؟

MMSHFE
جمعه 14 بهمن 1390, 15:49 عصر
میشه بیشتر توضیح بدین؟ اگه ممکنه کد htaccess. خودتون رو هم بگذارین.

idocsidocs
جمعه 14 بهمن 1390, 16:53 عصر
میشه بیشتر توضیح بدین؟ اگه ممکنه کد htaccess. خودتون رو هم بگذارین.

منظورم با توابع پی اچ پی بود.

MMSHFE
جمعه 14 بهمن 1390, 17:04 عصر
اگه منظورتون تبدیل http://www.mysite.com/article/15 به article/15 هست، به راحتی با str_replace میشه:


$url = str_replace('http://www.mysite.com/', '', $url);

اگر هم منظورتون چیز دیگه ای هست، بفرمایید تا بهتر راهنمایی کنم. موفق باشید.

idocsidocs
جمعه 14 بهمن 1390, 17:40 عصر
اگر هم منظورتون چیز دیگه ای هست، بفرمایید تا بهتر راهنمایی کنم. موفق باشید. برای این کار تابع آماده وجود نداره؟

MMSHFE
شنبه 15 بهمن 1390, 08:53 صبح
فکر میکنم parse_url (http://ir.php.net/manual/en/function.parse-url.php) برای کار شما مناسب باشه. موفق باشید.

idocsidocs
شنبه 15 بهمن 1390, 12:24 عصر
فکر میکنم parse_url (http://ir.php.net/manual/en/function.parse-url.php) برای کار شما مناسب باشه. موفق باشید.

مهندس یه سوال دیگه: آیا یه هکر می تونه مقدار ریفر رو طوری تغییر بده که باعث هک شدن یا آسیب رسیدن به کد بشه؟ آیا ریفر رو آپاچی تولید می کنه یا اینکه توی هدرها مشخص می شه و آپاچی در این زمینه نقشی نداره؟

MMSHFE
شنبه 15 بهمن 1390, 12:35 عصر
Referer رو مرورگر تولید میکنه. درنتیجه هکر میتونه اون رو دستکاری کنه. خود شما هم با افزونه ModifyHeaders توی FF میتونید اینکار رو انجام بدین. موفق باشید.

idocsidocs
شنبه 15 بهمن 1390, 12:46 عصر
Referer رو مرورگر تولید میکنه. درنتیجه هکر میتونه اون رو دستکاری کنه. خود شما هم با افزونه ModifyHeaders توی FF میتونید اینکار رو انجام بدین. موفق باشید.

بنظرتون اگر مقدار ریفر رو توی آرایه گت یا توی یه فیلد از فرم قرار بدم و برای پی اچ پی بفرستم، مشکل امنیتی پیش نمی یاد؟

MMSHFE
شنبه 15 بهمن 1390, 16:26 عصر
دلیل خاصی برای این کار دارین؟ توسط SERVER_$ که ارسال میشه. چرا باید دوباره کاری کنیم؟

idocsidocs
شنبه 15 بهمن 1390, 17:09 عصر
دلیل خاصی برای این کار دارین؟ توسط SERVER_$ که ارسال میشه. چرا باید دوباره کاری کنیم؟

توی پستهای قبلی گفته شد که مقدار ریفر رو یا باید توی متغیر گت قرار داد یا توی یه فیلد مخفی از فرم یا ... و بعد کاربر رو به همین آدرس ریدایرکت کرد.

همونطور که شما گفتید هکر می تونه این مقدار رو تغییر بده، با توجه به این مطلب آیا مقدار ریفر می تونه باعث هک شدن وب سایت بشه؟

MMSHFE
شنبه 15 بهمن 1390, 17:27 عصر
اگه Referer رو قبل از استفاده در کدهاتون بررسی کنید که مربوط به دامنه سایت خودتون باشه، فکر نمیکنم مشکلی پیش بیاد ولی اگه چک نکنید، بله احتمال نفوذ هست چون هکر میتونه یک فرم جعلی بسازه و با اون، توی سایت شما لاگین کنه و بعد، برگرده توی سایت خودش (با تغییر تگ مخفی یا متغیر Get). هرچند مطمئن نیستم با این روش چیز زیادی گیرش بیاد ولی در هر حال چک کردن Referer ایده خوبیه چون باعث میشه ازطریق فرمهای موجود در سایر سایتها نشه توی سایت شما لاگین کنن.

idocsidocs
شنبه 15 بهمن 1390, 18:16 عصر
چطور باید ریفر رو چک کنم؟

MMSHFE
شنبه 15 بهمن 1390, 18:22 عصر
['SERVER['HTTP_REFERER_$

idocsidocs
شنبه 15 بهمن 1390, 18:35 عصر
منظورم چک کردن ریفر از نظر امنیتی بود

MMSHFE
شنبه 15 بهمن 1390, 18:44 عصر
آهان، منظورم از چک کردن این بود که ببینید مربوط به دامین سایت خودتون هست یا از جای دیگری اومده، همین. چک کردن خاص و پیچیده ای مدنظرم نبود. هرچند این کار خیلی امنیت رو بالا نمیبره اما شما رو از دست جوجه هکرها! خلاص میکنه و حداقل فقط باید نگران هکرهای نسبتاً حرفه ای باشید.

idocsidocs
شنبه 15 بهمن 1390, 20:53 عصر
چطور می شه مقدار ریفر رو بصورت کامل (نام دامنه، کوئری استرینگ و...) چک کرد تا از ورود هر نوع داده مخرب به سایت جلوگیری کرد؟

MMSHFE
یک شنبه 16 بهمن 1390, 07:42 صبح
با همون تابع parse_url میتونید اینکار رو انجام بدین. کافیه Referer رو بعنوان پارامتر بهش بدین تا اون رو تجزیه و تحلیل کنه و بخشهای مختلفش رو بصورت یک آرایه به شما تحویل بده.
موفق باشید.