এএসপি.নেটে, আমি কখন সেশন.আব্যান্ডন () এর চেয়ে সেশন.ক্লেয়ার () ব্যবহার করব?


118

উভয় সেশন.ক্লেয়ার () এবং সেশন.এব্যান্ডন () সেশন ভেরিয়েবলগুলি থেকে মুক্তি পান। যেহেতু আমি এটি বুঝতে পেরেছি, অ্যাডানডোন () বর্তমান অধিবেশনটি সমাপ্ত করে এবং একটি নতুন অধিবেশন তৈরি করে এবং এর ফলে এন্ড এবং স্টার্ট ইভেন্টগুলিকে আগুন দেয়।

ব্যবহারকারীকে লগ আউট করার মতো বেশিরভাগ ক্ষেত্রে অ্যাডানডোন () কল করা ভাল বলে মনে হয়। এর পরিবর্তে আমি কি ক্লিয়ার () ব্যবহার করব এমন পরিস্থিতি রয়েছে? পারফরম্যান্স পার্থক্য অনেক আছে?

উত্তর:


172

Session.Abandon() সেশনটি ধ্বংস করে এবং সেশন_অনএন্ড ইভেন্টটি ট্রিগার করা হয়।

Session.Clear()কেবলমাত্র অবজেক্ট থেকে সমস্ত মান (সামগ্রী) সরিয়ে দেয়। একই কী সহ অধিবেশনটি এখনও বেঁচে আছে।

সুতরাং, আপনি যদি ব্যবহার করেন তবে আপনি Session.Abandon()সেই নির্দিষ্ট সেশনটি হারাবেন এবং ব্যবহারকারী একটি নতুন সেশন কী পাবেন get আপনি এটি ব্যবহার করতে পারেন উদাহরণস্বরূপ যখন ব্যবহারকারী লগ আউট করে।

ব্যবহার করুন Session.Clear(), যদি আপনি চান যে একই একই অধিবেশনটিতে থাকা ব্যবহারকারী (যদি আপনি না চান তবে ব্যবহারকারী উদাহরণস্বরূপ পুনরায় চালু করতে চান) এবং সমস্ত সেশন নির্দিষ্ট ডেটা পুনরায় সেট করুন।


1
আমি ক্লিয়ার () এর পরিবর্তে সরানআল () ব্যবহার করা ভাল বলে বিশ্বাস করি, যেহেতু "দারিন দিমিত্রভ" এখানে পরামর্শ দিয়েছেন stackoverflow.com/a/3931344/713246
বিভু

4
@ বিভূ: তিনি কীভাবে পরামর্শ দিলেন যে রিমুভাল সমস্ত () সাফ () এর চেয়ে ভাল? আমি তার উত্তরে যা দেখেছি তা হ'ল সরান (সমস্ত) সাফ () কে কল করে এবং কার্যত অভিন্ন বলে মনে হয়।
অ্যাডাম মিলার

1
Session.Abandon()উইন্ডোজ প্রমাণীকরণ ব্যবহার করে কেবলমাত্র একটি অভ্যন্তরীণ অ্যাপ্লিকেশনটিতে 'লগআউট' হিসাবে ব্যবহার করা হয়েছে - ব্যবহারকারীদের (ক্রোম, এফএফ) পুনরায় প্রমাণীকরণ করতে হবে না, তবে সেশনটি
বরখাস্ত করা হয়েছে

13

যখন কোনও ব্যবহারকারী লগ আউট করে তখন কেবল সেশন.ক্লেয়ার () ব্যবহার করে কোনও সুরক্ষা গর্ত হতে পারে। ওয়েব সার্ভার সম্পর্কিত হিসাবে সেশন এখনও বৈধ। এটি স্নিগ্ধ করা, এবং সেশন আইডি দখল করা এবং সেই অধিবেশন হাইজ্যাক করা যুক্তিসঙ্গতভাবে তুচ্ছ বিষয়।

এই কারণে, কোনও ব্যবহারকারীকে লগ আউট করার সময় সেশনটি ব্যবহার করা আরও নিরাপদ এবং বোধগম্য হবে band নতুন অধিবেশনটিতে কোনও ব্যবহারকারীর বিবরণ থাকবে না এবং নতুন সেশনে হাইজ্যাক করা নতুন সেশনের সমতুল্য হবে, সুতরাং এটি নিঃশব্দ হবে)।


4
খালি অধিবেশন হাইজ্যাক করার কী লাভ হবে? ছিনতাইকারীটিকে এখনও লগ ইন করতে হবে এবং নতুন ব্যবহারকারীরটিকে দুর্ঘটনাক্রমে সরবরাহ করার মতো কোনও তথ্য নেই।
23-10 এ পরীক্ষিত

3

Session.Abandonউপরে বর্ণিত অধিবেশনটি নষ্ট করে দেয় তাই কাউকে লগ আউট করার সময় আপনার এটি ব্যবহার করা উচিত। আমি মনে করি একটি Session.Clearইকমার্স ওয়েবসাইটে শপিংয়ের ঝুড়ির জন্য ভাল ব্যবহার হবে। এইভাবে ঘুড়িটি ব্যবহারকারীকে লগ আউট না করে সাফ হয়ে যায়।


তবে আমি যদি Session.Abandonকেবল একটি নির্দিষ্ট শপিংয়ের ঝুড়ি পরিষ্কার করতে ব্যবহার করি ?
WTFZane

0

আমি এই সমস্যাটি পেয়েছি এবং উভয়ই চেষ্টা করেছিলাম, তবে "পেজএডিটস্টেট" এর মতো ক্রেপ অপসারণের জন্য নিষ্পত্তি করতে হয়েছিল, তবে ব্যবহারকারীর তথ্য অপসারণ করা উচিত নয় যাতে আমাকে আবার এটির সন্ধান করতে হবে।

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.