PDA

View Full Version : از بین رفتن اطلاعات session پس از ورود به صفحه بانک



alirayaneh
شنبه 24 بهمن 1388, 00:19 صبح
سلام دوستان من دارم یه ماژول برای درگاه پرداخت یکی از بانکها مینویسم
بعد متوجه شدم وقتی کاربری از طریق فروشگاه بعد از انتخاب کالا و تعیین مبلغ ، وارد سایت بانک میشود تا پرداخت را انجام دهد .... در هنگام بازگشت از صفحه سایت بانک به فروشگاه اطلاعات session از بین میرن
مثلان
کاربر = ali
کالا = کتاب
مبلغ= 200
این اطلاعات به session دادم و بعد از ارسال پارامتر "مبلغ" به سایت بانک برای انجام تراکنش در هنگام باز گشت به صفحه ثبت گزارش پرداخت اطلاعاتی رو که قبلا به سشن دادم
نیست یعنی نه مقدار کاربر هست و نه نوع کالا انتخاب شده در سشن نیست

چیکار باید کنم
سایت بانک هم توسط ssl محافظت میشه میتونه دلیلش این باشه؟

mrbm_2007
شنبه 24 بهمن 1388, 15:21 عصر
از کوکی استفاده کن
(البته شاید خیلی خوب نباشه!)

alirayaneh
شنبه 24 بهمن 1388, 15:31 عصر
با تشکر از شما
من چندتا کوکی هم ست کردم ولی ظاهرا یا مشکل از کد های منه یا چیز دیگر چون اجرا نمیشه
مثلا من این جا یه متغیر رو به سشن دادم بعد مقدار این سشن رو به کوکی دادم این و بعد از بازگشت از سایت بانک در صفحه دوم مقدار کوکی رو به سشن دادم برنامه رو لوکال خوب کار میکنه و ولی روی سرور ارور میده یعنی کوکی ایجاد نمیکنه

کد صفحه اول


<?php
session_start();
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>


</body>
</html>
<?php
$a="ali";
$b=setcookie("fname",$a,time()+3600);

$_SESSION['fname']="$b";

$m=@$_SESSION['fname'];
echo "$m";
?>
کد صفحه دوم


<?php session_start(); ?>
<?php
$_SESSION['os']=$_COOKIE['fname'];
$m=@$_SESSION['os'];
echo "$m";
?>



در هنگام اجرا روی سرور این ارور رو میده



Warning: Cannot modify header information - headers already sent by (output started at /home/xxx/public_html/report/1.php:20) in /home/xxx/public_html/report/1.php on line 22

funpatogh
شنبه 24 بهمن 1388, 15:56 عصر
دوست عزیز کوکی و سشن از توابعی هستند که نباید قبلش چیزی به هدر ارسال شده باشند


<?php
session_start();
$a="ali";
$b=setcookie("fname",$a,time()+3600);
$_SESSION['fname']="$b";
$m=@$_SESSION['fname'];
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>


</body>
</html>
<?php



echo "$m";
?>

امیـرحسین
شنبه 24 بهمن 1388, 16:58 عصر
این مشکل session زیاد پیش میاد. کاری که معمولا سیستم بانک اجازه اش رو میده، فرستادن و گرفتن SESSION_ID از طریق لینک هست. یعنی شما شناسه Session رو به بانک می فرستید و موقع برگشتن به سایت، این شناسه رو بانک به انتهای آدرس اضافه می کنه.
غیر از اون، شما می تونید ادامه عملیات رو از سیستم Session های کاربر جدا کنید. یعنی اگر من باشم و چنین مشکلی بربخورم، صفحه پرداخت رو در یک پنجره یا تب دیگه باز می کنم که کاربر همچنان در سایت بمونه و صفحه ای موقع بازگشت از بانک به کاربر نمایش میدم چیزی جز یه دکمه برای بسته شدن یا رفتن به صفحه اصلی توش وجود نداره.

در کل این یک مشکل عمومی هست و از پشتیبانی بانک سوال کنید که چه راهکاری رو پیش بینی کردند.

alirayaneh
شنبه 24 بهمن 1388, 17:06 عصر
ممنونم

دیگه ارور نمیده

ولی الان خروجی صفحه اول عدد یک هست
توی صفحه اول 1 چاپ میشه در حالی که مقدار "ali " رو بهش داده بودم
حتی سشن رو unset کردم وکوکی رو هم 3600- کردم ولی هنوزم یک چاپ میشه
دلیلش چیه؟

alirayaneh
شنبه 24 بهمن 1388, 17:15 عصر
امیـرحسین (http://barnamenevis.org/forum/member.php?u=94384) جان
از شما هم تشکر میکنم
منظورتون اینه که session_id
رو به آدرس بانک از طریق متود Get ارسال کنم یا اینکه به همون طریقی که سایر پارامتر ها رو به بانک ارسال میکنم ....
ضمن این که روش دومی که اشاره کردید. جایی ندیدم استفاده بشه و ممکنه کاربر بین صفحهات گم بشه ...
و اکثرا همه جا به شکل یک پارچه مرسوم هست
برای مثال سری به لینک زیر بزنید
http://charge.cloob.com/

امیـرحسین
شنبه 24 بهمن 1388, 18:05 عصر
الان من سیستم بانک سامان رو دارم میبینم که این دردسرها رو نداره. این فرم نمونه اشه:
<form action="https://acquirer.sb24.com/CardServices/controller" method="post">
<input type="hidden" id="Amount" name="Amount" value="1">
<input type="hidden" id="MID" name="MID" value="00025004-02">
<input type="hidden" id="ResNum" name="ResNum" value="603">
<input type="hidden" id="RedirectURL" name="RedirectURL" value="http://www.domain.com/">
<input name="B1" value="Send" type="submit">
</form>

یکی از فیلدهاش آدرس برگشتن از بانکه که شما می تونید مثلا اینجوری مقدار بدید:
<?php
session_start();
$RedirectURL = 'http://www.domain.com/somepage.php?' . SID ;
?>
<form action="https://acquirer.sb24.com/CardServices/controller" method="post">
<input type="hidden" id="Amount" name="Amount" value="1">
<input type="hidden" id="MID" name="MID" value="00025004-02">
<input type="hidden" id="ResNum" name="ResNum" value="603">
<input type="hidden" id="RedirectURL" name="RedirectURL" value="<?php echo $RedirectURL; ?>">
<input name="B1" value="Send" type="submit">
</form>
حالا تو صفحه somepage.php وقتی Session_start رو اجرا کنید، session ها شناخته میشن.

این صفحه رو مطالعه کنید: Passing the Session ID (http://php.net/manual/en/session.idpassing.php)

اعظم
یک شنبه 25 بهمن 1388, 11:12 صبح
کاملا طبیعی که سیشن‌ها از بین برن چون وارد یک سایت دیگه ( که سایت بانک ) میشه . در این موارد اصلا از سیشن استفاده نمیشه در ماژولهای نمونه ای که بانک‌ها ارائه می کنند هم الگوریتم کار به این شکل است که اول یک درخواست ارتباط به بانک ارسال میشه بانک 2 تا متغییر که یکی وضعیت کانکشن و دیگری ID ارتباط برقرار شده است رو بر میگردونه در این لحظه در صورت مثبت بودن متغییر وضعیت کانکشن و قبل از ریدارکت کردن صفحه برنامه به صفحه بانک یک رکورد در جدول محصولات سفارش داده شده همراه با ID که بانک برگردونده و اطلاعات محصول و سفارش دهنده درج می شود

در ادامه ( بعد از ریدارکت شدن به صفحه بانک ) درصورت تکمیل تراکنش بانکی وضعیت این رکورد در جدول آپدیت میشه .

jirjirakk
سه شنبه 27 بهمن 1388, 12:08 عصر
اخطار : به هیچ وجه ممکن از سشن برای این کار استفاده نکنید
اطلاعاتی از کاربر را که در سشن می خواهید ذخیره کنید همان ها را در بانک اطلاعاتی خودتان ذخیره کنید
و شماره ID رکورد (و یا هر فیلد یکتای دیگه ای که دارین) که ثبت شده را به عنوان مقدار یک فیلد به سمت بانک پست کنید (اگه اشتباه نکنم بانک سامان ResNum هستش)
بانک هم بعد از انجام تراکنش (چه درست و چه اشتباه) همراه دیتایی که برای آدرس سایت شما پست می کند همان عددی که ارسال کرده اید را هم ارسال می کند و شما کافی است که از بانک خودتون select بزنین و به اطلاعات دسترسی پیدا کنید