رفتن به مطلب
  • 0

پاک شدن سشن بعد از نیم ساعت در b4a


hosseinkarimian

سوال

سلام من هنگام ارتباط با سرور بعد از اینکه کاربر در اپ ثبت نام کرد نام کاربری و رمز در دیتابیس ذخیره میشه و هر بار که وارد اپ میشه این اطلاعات به سرور ارسال و بعد از اعتبارسنجی کاربر سشن ایجاد میشه و بقیه کار ها با سشن انجام میشه اگه کاربر توی اپ گوشی رو قلفل کنه یا برنامه توی  recence ها باشه و با برنامه های دیگه کار کنه بعد نیم ساعت وارد اپ بشه سشن php حذف میشه دوستان چطور میتونم این مشکل حل کنم.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

10 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

تو php.ini بخشی برای افزایش ماندگاری سیشن هست

session.gc_maxlifetime=1440

ولی کاربرد سیشن برای کوتاه مدته.

 

بهتره دوتا ستون جدید به دیتابیس اضافه بشه تو تیبل یوزرها ( برای ذخیره سیشن ، تاریخ انقضا سیشن) ، اینارو بعد از هر لاگین بروزرسانی کرد.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱ ساعت قبل، M-CAP7AIN گفته است :

تو php.ini بخشی برای افزایش ماندگاری سیشن هست


session.gc_maxlifetime=1440

ولی کاربرد سیشن برای کوتاه مدته.

 

بهتره دوتا ستون جدید به دیتابیس اضافه بشه تو تیبل یوزرها ( برای ذخیره سیشن ، تاریخ انقضا سیشن) ، اینارو بعد از هر لاگین بروزرسانی کرد.

واقعا از شما خیلی تشکر میکنم که همیشه مشکلات زیادی رو حل میکنید.

منظور از دخیره سشن در دیتابس یعنی یه فیلد به تیبل یوز ها اضافه کنم و هر باری کاربر لاگین میشه timestamp  زمان جاری رو مثلا 60 روز اضافه کنم که تاریخ انقضاء میشه بعد اون رو توی فیلد انقضاء بروز رسانی کنم . بعد باید چی بشه میشه مثال برنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

:DD:.

  1. لاگین با php
  2. ساخت سیشن (ذخیره سیشن داخل دیتابیس با زمان دلخواه)
  3. چاپ کردن این سیشن برای کلاینت
  4. ذخیره این سیشن توسط کلاینت تو حافظه داخلی

 

ارسال پارامترهای POST , GET یا ... کلاینت به همراه این سیشن.

  1. اول چک کردن زمان سیشن با خود سیشن ارسال شده.(اگه اوکی بود ، اینجا میتونیم مدت زمان رو آپدیت کنیم.)
  2. پاسخ دادن به کلاینت.

اجرا مجدد نرم افزار ، حذف سیشن ، دریافت سیشن جدید.

 

------------------------------------------

برای اینکه کار خیلی ساده بشه یه فیلد جدید به دیتابیس اضافه میشه فقط مقدار کلید سیشن ذخیره میشه بدون زمان. موقعی که کلاینت برای اولین بار لاگین شد این کلید ساخته میشه ، برای کاربر چاپ میشه ، کاربر ذخیره میکنه با هر درخواسته دریافت دیتا این کلید همراه ما بقی پارامترها ارسال میشه. وقتی که کاربر نرم افزار رو حذف کرد مجدد لاگین کرد کلید جدید ساخته بشه.

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 7 ساعت قبل، hosseinkarimyan گفته است :

روند کار برنامه به  این صورت هست وقتی کاربر ثبت نام می کنه نام کاربری و رمز عبور در دیتابیس توی گوشی ذخیره میشه بعد مثلا کاربر اگه برنامه رو کامل ببنده و هر وقتی وارد برنامه بشه نام کاربری و رمز عبور که در دیتابس ذخیره شده بود به فایل لاگین php ارسال میشه بعد در فایل مربوط به لاگین php میاد چک میکنه که ایا نام کاربری و رمز عبور در دیتابس آنلاین موجود در سرور یکی هست اگه درست بود سشن ایجا میکنه و بقیه کار هایی که انجام میشه با سشن php اعتبارسنجی میشه مشکل اینکه وقتی مثلا کاربر نیم ساعت توی اپ بمونه و هیچ کاری نکنه و یا  برنامه رو کامل نبره و  مثلا توی اینستاگرام  بره بعد نیم ساعت بیاد توی برنامه سشن php حذف میشه.

سلام دلیل خاصی برای این کار دارید ؟

چون وقتی کاربر شما توی برنامه عضو شد کافی هست برای دسترسی های بعدی id کاربرتون رو جای ذخیره کرده باشید!

برای خروج کاربر هم بیابد اون id رو پاک کنید و توی برنامه کنترل کنید آیا اون id مقدار داره یا نه اگر مقدار داشت یعنی لاگین هست اگه نه هم خب صفحه لاگین رو بهش نشوم بدید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام من یه دیتابیس افلاین دارم که هنگام ثبت نام یا فرم لاگین  شماره تلفن کاربر و رمز عبورش رو ذخیره میکنه ، بعد هر وقت کاربر برنامه رو اجرا کرد در Activity_Create میاد چک میکنه اگه دیتابیس در گوشی بود شماره تلفن کاربر و رمز عبور از دیتابیس موجود در گوشی می خونه و اون رو ارسال میکنه به فایل login.php در سرور بعد اگه نام کاربری و رمز عبور معتبر بود یعنی کاربر وارد شده پس یه sesstion با php ایجاد میکنه که در سشن وضعیت لاگین و شماره تلفن کاربر رو ذخیره میکنه.

بعد فرض کنید توی قسمت پروفایل که در برنامه هست اطلاعات باید از سرور بگیره پس در فایل profile.php      میاد چک میکنه آیا سشن ساخته شده اگه بود میاد در دیتابیس آنلاین  در جدول user ها سرچ میکنه اطلاعات مر بوط به شماره تلفن موجود در سشن رو میاره پس نام و نام خانوادگی رو بدست میاره و به صورت json بر میکردونه به برنامه ، و سایر قسمت های برنامه که باید کاربر لاگین شده باشه با سشن کار میکنه.

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

خدایی دوستان خیلی مهمه برام کمک کنید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

 

اما راه حلی که بنظرم بهتر هست برای شما اینکه یک api بنویسید (نترسید:shout: )و مستقل از کد های سایت تون به دیتابیس کار کنه

یک مثال می زنم خدمتون اگه روشن نشد بگید تا بیشتر توضیح بدم

b4a

Sub Process_Globals
	Dim htName As HttpJob
End Sub

Sub Activity_Create(FirstTime As Boolean)

	htName.Initialize("htName",Me)
	//جای این شماره رو ذخیره کن
	Dim ph As AriaSharedPreferences
	ph.Initialize("")
 	Dim phone As Int
	phone = shpr.GetString("phone","")
	//شماره همراه رو پست مس کنه به فایل پی اچ پی
	htName.PostString("http://salmanfa.ir/sher/apiv1.php","phoneUser=&phone)
End Sub

Sub jobDone(job As HttpJob)
	If job.Success Then
		Try
			If job.JobName="htName" Then
				Dim parser As JSONParser
				parser.Initialize(job.GetString)
				Dim listData As List
				listData.Initialize
				listData=parser.NextArray
				For Each mapData As Map In listData
					// اینجا هم اسم رو می گیری
					lblName.Text=mapData.Get("name")

				Next
			End If
		Catch
			Log(LastException)
		End Try
	End If
End Sub

php

if (isset($_POST['phoneUser'])) {
// اگر شماره ارسال شذه بود
    $phone = $_POST['phoneUser'];
	
	$link = mysqli_connect("localhost", "root", "", "dbName");
	// اتصال به دیتابیس
	if ($link) {
		mysqli_connect_error();
	}
	mysqli_query($link, 'SET character_set_result = utf8');
	mysqli_query($link, 'set names utf8');
	mb_internal_encoding('utf8');

// گرفتن ای دی کاربر از روی شمارش
	$query ="SELECT * FROM `users` WHERE `phoneUser` = '$phone' ";
	$result = mysqli_query($link;, $query);
	if ($result->num_rows > 0 ){
		while($data = mysqli_fetch_array($result)){
		  $id = $data['id'];//مقدار توی این متغیر می ریزی  
			
		  // اینجا هم اسم رو می گیری
          $query ="SELECT * FROM `users` WHERE id =$id"; 
          $result =mysqli_query($link;, $query);
          while($data = mysqli_fetch_object($result)){
				echo json_encode($data->name);//مقدار رو تبدیل یه جیسون می کنیم و اکو می کنیم
          }
		}
	}
}

یا علی

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 11 دقیقه قبل، abdgod گفته است :

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

 

اما راه حلی که بنظرم بهتر هست برای شما اینکه یک api بنویسید (نترسید:shout: )و مستقل از کد های سایت تون به دیتابیس کار کنه

یک مثال می زنم خدمتون اگه روشن نشد بگید تا بیشتر توضیح بدم

b4a


Sub Process_Globals
	Dim htName As HttpJob
End Sub

Sub Activity_Create(FirstTime As Boolean)

	htName.Initialize("htName",Me)
	//جای این شماره رو ذخیره کن
	Dim ph As AriaSharedPreferences
	ph.Initialize("")
 	Dim phone As Int
	phone = shpr.GetString("phone","")
	//شماره همراه رو پست مس کنه به فایل پی اچ پی
	htName.PostString("http://salmanfa.ir/sher/apiv1.php","phoneUser=&phone)
End Sub

Sub jobDone(job As HttpJob)
	If job.Success Then
		Try
			If job.JobName="htName" Then
				Dim parser As JSONParser
				parser.Initialize(job.GetString)
				Dim listData As List
				listData.Initialize
				listData=parser.NextArray
				For Each mapData As Map In listData
					// اینجا هم اسم رو می گیری
					lblName.Text=mapData.Get("name")

				Next
			End If
		Catch
			Log(LastException)
		End Try
	End If
End Sub

php


if (isset($_POST['phoneUser'])) {
// اگر شماره ارسال شذه بود
    $phone = $_POST['phoneUser'];
	
	$link = mysqli_connect("localhost", "root", "", "dbName");
	// اتصال به دیتابیس
	if ($link) {
		mysqli_connect_error();
	}
	mysqli_query($link, 'SET character_set_result = utf8');
	mysqli_query($link, 'set names utf8');
	mb_internal_encoding('utf8');

// گرفتن ای دی کاربر از روی شمارش
	$query ="SELECT * FROM `users` WHERE `phoneUser` = '$phone' ";
	$result = mysqli_query($link;, $query);
	if ($result->num_rows > 0 ){
		while($data = mysqli_fetch_array($result)){
		  $id = $data['id'];//مقدار توی این متغیر می ریزی  
			
		  // اینجا هم اسم رو می گیری
          $query ="SELECT * FROM `users` WHERE id =$id"; 
          $result =mysqli_query($link;, $query);
          while($data = mysqli_fetch_object($result)){
				echo json_encode($data->name);//مقدار رو تبدیل یه جیسون می کنیم و اکو می کنیم
          }
		}
	}
}

یا علی

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

به نظر شما اگه در b4a هر جایی که ربط به حساب کاربری داشت مثلا نمایش پروفایل یا تغییر پروفایل و... مثلا برای تغییر پروفایل بیام نام کاربری و رمز عبور که در دیتابیس در گوشی ذخیره شده رو همراه با اسم جدید کاربر بفرستم  به فایل updateprofile.php بعد  بالای تمامی کد ها یوز و پسورد رو بگیرم و اون رو با  php  curl به فایل login.php بفرستم  و نتیجه اگه ورود موفق بود بقیه  ی کد ویرایش پروفایل اجرا بشه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

گفنم  خدمتتون کوکی  و سیشن برای استفاده از مقادیر در  صفحات مرورگر هستن که جای برای ذخبره داده ها یرای ورود های بعدی کاربر ندارن برای برنامه اندرویدی که دسترسی به تمام منابع یک گوشی هست نیازی به استفاده از سیشن نیست ، و اصولی هم نیست این کار!

شرمنده راستش حالا متوجه شدم کد ادغام کوکی برای سیشن هم برای زمانی ممکن هست درست کار کنه که شما از وب ویو استفاده کنید چون b4a  نمی تونه کوکی رو نگهداره

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 14 دقیقه قبل، hosseinkarimyan گفته است :

سلام من هنگام ارتباط با سرور بعد از اینکه کاربر در اپ ثبت نام کرد نام کاربری و رمز در دیتابیس ذخیره میشه و هر بار که وارد اپ میشه این اطلاعات به سرور ارسال و بعد از اعتبارسنجی کاربر سشن ایجاد میشه و بقیه کار ها با سشن انجام میشه اگه کاربر توی اپ گوشی رو قلفل کنه یا برنامه توی  recence ها باشه و با برنامه های دیگه کار کنه بعد نیم ساعت وارد اپ بشه سشن php حذف میشه دوستان چطور میتونم این مشکل حل کنم.

باید از دیتابیس استفاده کنید ، سیشن رو ذخیره کنید یا کلیدی از نام کاربری و رمزعبور بسازید و ذخیره کنید ، بجای ارسال نام کاربری و رمزعبور این کلید رو بفرستید ، این کلید داخل گوشی هم باید ذخیره بشه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 3 دقیقه قبل، M-CAP7AIN گفته است :

باید از دیتابیس استفاده کنید ، سیشن رو ذخیره کنید یا کلیدی از نام کاربری و رمزعبور بسازید و ذخیره کنید ، بجای ارسال نام کاربری و رمزعبور این کلید رو بفرستید ، این کلید داخل گوشی هم باید ذخیره بشه.

روند کار برنامه به  این صورت هست وقتی کاربر ثبت نام می کنه نام کاربری و رمز عبور در دیتابیس توی گوشی ذخیره میشه بعد مثلا کاربر اگه برنامه رو کامل ببنده و هر وقتی وارد برنامه بشه نام کاربری و رمز عبور که در دیتابس ذخیره شده بود به فایل لاگین php ارسال میشه بعد در فایل مربوط به لاگین php میاد چک میکنه که ایا نام کاربری و رمز عبور در دیتابس آنلاین موجود در سرور یکی هست اگه درست بود سشن ایجا میکنه و بقیه کار هایی که انجام میشه با سشن php اعتبارسنجی میشه مشکل اینکه وقتی مثلا کاربر نیم ساعت توی اپ بمونه و هیچ کاری نکنه و یا  برنامه رو کامل نبره و  مثلا توی اینستاگرام  بره بعد نیم ساعت بیاد توی برنامه سشن php حذف میشه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...