সাধারণত, আপনার যা যা দরকার তা হ'ল এই দুটি অনুরোধের মধ্যে কিছুটা রাজ্য বহন করা। এটি করার সত্যিই একটি মজাদার উপায় রয়েছে যা জাভাস্ক্রিপ্টের উপর নির্ভর করে না (মনে করুন <noscript />)।
Set-Cookie: name=value; Max-Age=120; Path=/redirect.html
সেই কুকির সাহায্যে, আপনি নীচের অনুরোধে /redirect.html নাম = মান তথ্য পুনরুদ্ধার করতে পারেন, আপনি 4K ডেটা (সাধারণ কুকির সীমা) বলার জন্য এই নাম / মান জোড় স্ট্রিংয়ে কোনও ধরণের তথ্য সঞ্চয় করতে পারেন। অবশ্যই আপনার এড়ানো উচিত এবং পরিবর্তে স্থিতি কোড এবং পতাকা বিটগুলি সংরক্ষণ করা উচিত।
এই অনুরোধটি পাওয়ার পরে আপনি তার স্থিতি কোডের জন্য একটি মুছে ফেলার অনুরোধের বিনিময়ে প্রতিক্রিয়া জানান।
Set-Cookie: name=value; Max-Age=0; Path=/redirect.html
আমার এইচটিটিপি কিছুটা মরিচা, আমি সত্যই কতটা নির্ভরযোগ্য এটি নির্ধারণ করার জন্য ট্রাফ আরএফসি 2109 এবং আরএফসি 2965 যাচ্ছি, আমি কুকি ঠিক একবারে ভ্রমণ করতে চাই তবে তা তৃতীয় পক্ষের কুকিজ বলে মনে হয় না আপনি যদি অন্য কোনও ডোমেনে স্থান পরিবর্তন করছেন তবে আপনার জন্য সমস্যা হতে পারে। এটি এখনও সম্ভব তবে ততটা বেদনাদায়ক নয় যেমন আপনি নিজের ডোমেনের মধ্যে জিনিসগুলি করছেন।
এখানে সমস্যা হ'ল সামঞ্জস্য, যদি কোনও বিদ্যুত ব্যবহারকারী একাধিক ট্যাব ব্যবহার করে এবং একই সেশনের কয়েকটি অনুরোধ অনুরোধ করে (এটি খুব অসম্ভব, তবে অসম্ভব নয়) এটি আপনার অ্যাপ্লিকেশনটিতে অসঙ্গতি সৃষ্টি করতে পারে।
এটি অর্থহীন ইউআরএল এবং জাভাস্ক্রিপ্ট ছাড়াই এইচটিটিপি রাউন্ড ট্রিপগুলি করার <নোগ্রিপ্ট /> উপায়
আমি এই কোডটি ধারণার প্রোফেসর হিসাবে সরবরাহ করি: যদি এই কোডটি এমন একটি প্রসঙ্গে চালানো হয় যা আপনি পরিচিত নন তবে আমি মনে করি আপনি কোন অংশটি কী তা কাজ করতে পারেন।
ধারণাটি হ'ল আপনি পুনর্নির্দেশের সময় আপনি কিছু রাজ্যের সাথে রিলোকটকে কল করেন এবং আপনি যে ইউআরএল স্থানান্তরিত করেছিলেন সেটিকে ডেটা পেতে (যদি থাকে) গেটস্টেটকে কল করে।
const string StateCookieName = "state";
static int StateCookieID;
protected void Relocate(string url, object state)
{
var key = "__" + StateCookieName + Interlocked
.Add(ref StateCookieID, 1).ToInvariantString();
var absoluteExpiration = DateTime.Now
.Add(new TimeSpan(120 * TimeSpan.TicksPerSecond));
Context.Cache.Insert(key, state, null, absoluteExpiration,
Cache.NoSlidingExpiration);
var path = Context.Response.ApplyAppPathModifier(url);
Context.Response.Cookies
.Add(new HttpCookie(StateCookieName, key)
{
Path = path,
Expires = absoluteExpiration
});
Context.Response.Redirect(path, false);
}
protected TData GetState<TData>()
where TData : class
{
var cookie = Context.Request.Cookies[StateCookieName];
if (cookie != null)
{
var key = cookie.Value;
if (key.IsNonEmpty())
{
var obj = Context.Cache.Remove(key);
Context.Response.Cookies
.Add(new HttpCookie(StateCookieName)
{
Path = cookie.Path,
Expires = new DateTime(1970, 1, 1)
});
return obj as TData;
}
}
return null;
}