C# Cookies (problem with modifying/replacing) - c#

I cannot modify last value of SessionKey which stored in cookies from server side. SessionKey in next request is still has old value. What wrong in my server's side code?
var varHttpListenerContextResponseCookie_SessionKey =
refHttpListenerContext.Response.Cookies[Constants.Cookies.LongNames.SessionKey];
if (varHttpListenerContextResponseCookie_SessionKey != null)
{
varHttpListenerContextResponseCookie_SessionKey.Value = refSessionKey;
}
else
{
refHttpListenerContext.Response.AppendCookie(
new System.Net.Cookie(Constants.Cookies.LongNames.SessionKey, refSessionKey));
}
Please help me!:)

You must remember to add your modified cookie to Response if you want to update value
// get existing cookie or create new
var cookie = Request.Cookies[Constants.Cookies.LongNames.SessionKey] ?? new HttpCookie(Constants.Cookies.LongNames.SessionKey);
// set cookie value
cookie.Value = refSessionKey;
// add cookie to http repsonse
Response.Cookies.Add(cookie);
MSDN - Basics of Cookies in ASP.NET

From my understanding you want to modify your session Key. If it is right then you can make use of SessionManager, which will let you create a new session key. If this is not what you wanted please give more details about your question.
Thanks,
Shashi
If your question is answered kindly mark it as Answered.

Also when modifying/adding a cookie, don't forget to create/increase the expiration, as expired cookies may not be retrievable
cookieForPage.Expires = DateTime.Today.AddYears(100);

Related

How to remove the cookie and check the status of the cookie in the same request in ASP.NET C#

I want to remove the cookie, but there is the following method that gets called. The method checks whether the cookie exists or not and executes the code based on that. So basically, if the cookie doesn't exist, the method should do nothing. This is all happening in the same request.
Code to remove the cookie
HttpCookie cookie = new HttpCookie("test");
cookie.Value = "";
cookie.Expires = DateTime.Now.AddDays(-10);
HttpContext.Current.Response.Cookie.Add(cookie);
After the execution of the above code snippet, if I try to access the cookie in the same request using the below code, it still exists and gives me the previous value.
Code to check if the cookie exists
if(Request.Cookies["test"] != null) {
var value = Request.Cookie["test"].Value;
}
All this works in the subsequent requests but not for the same request.
After I remove the cookie, if I try to access the same cookie anywhere in the code for the same request, it should return null or should not exist.
How can I achieve this?
I tried another solution, like setting the cookie name to null, but it didn't work.
Any help here would be much appreciated.

Updated Cookie not working on Response.Redirect

I am updating the cookie as follows
if (Request.Cookies["SSOPortalUser"] == null)
{
HttpCookie myCookieSSOPortalUser = new HttpCookie("SSOPortalUser");
// Set the cookie value.
myCookieSSOPortalUser.Value = currentUser.UserLogin.ToString();
// Add the cookie.
Response.Cookies.Add(myCookieSSOPortalUser);
}
else
{
Request.Cookies["SSOPortalUser"].Value = currentUser.UserLogin.ToString();
}
But after I redirect to another page the is not updating in the browser
Response.Redirect(AppSettings.Instance.AppRoot + "OperationSelection.aspx");
and in the operationSelection Page I am trying to access the cookie it shows the previous value .
lbluser.Text = Request.Cookies["SSOPortalUser"].Value
The problem, as figured out in comments, is caused by wrong assumption that updating request cookie value (in else branch) will somehow update cookie value on client. That's not so, because to update cookie on client you need to attach another cookie with the same name (and different value) to the response. Updating request cookie does nothing useful (just updates value of in-memory structure representing request cookie).

C# overwrite Existing Cookie in CookieContainer?

I request a page with HTTPWebRequest and using this code. I add cookie
agent.cookieJar.Add(new Uri("http://www.website.com"),
new Cookie("brbr", "harta&brbra&=-"));
I ended up with two of the same cookies with different values in each of them. Because the
request has Javascript cookies sent back. What function should I use to
overwrite/update "brbr" cookie When I need to?
Their is overwrite method available in C# HttpCookie clas but you can overwrite the value of the cookie as you want as shown below
Request.Cookies["brbr"] = "Some New Value";
Or
Response.Cookies["brbr"] = "Some New Value";
Kind of an old question, but figured I would post anyway. The Set method on your cookie collection should do the job.
agent.cookieJar.Set(new HttpCookie("brbr", "harta&brbra&=-"));
This way you don't have to worry if the cookie already exists or not.

Create new cookie to edit its value

I know that you can't edit incoming cookies. I have a cookie that I just need to read..nothing more but I have a need to remove some characters from its value so that I can parse it. How can I do this? I don't need to send the modified new cookie back in the response, it's just for my server-side consumption and then that's it.
Updated:
figured it out:
HttpCookie facebookAuthCookie = HttpContext.Current.Request.Cookies[facebookCookieName];
string cleanValue = facebookAuthCookie.Value.Replace("\"", string.Empty);
HttpCookie cleanedFacebookAuthCookie = new HttpCookie("cleanedFacebookCookie", cleanValue);
gayness
Is it too simple to say read the values into a local variable and do whatever you want there?

Cookie loses value in ASP.net

I have the following code that sets a cookie:
string locale = ((DropDownList)this.LoginUser.FindControl("locale")).SelectedValue;
HttpCookie cookie = new HttpCookie("localization",locale);
cookie.Expires= DateTime.Now.AddYears(1);
Response.Cookies.Set(cookie);
However, when I try to read the cookie, the Value is Null. The cookie exists. I never get past the following if check:
if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))
Help?
The check is done after a post back? If so you should read the cookie from the Request collection instead.
The cookies are persisted to the browser by adding them to Response.Cookies and are read back from Request.Cookies.
The cookies added to Response can be read only if the page is on the same request.
The most likely answer is seen on this post
When you try to check existence of a cookie using Response object rather than Reqest, ASP.net automatically creates a cookie.
Edit: As a note, I ended up writing software that needed to check the existence of cookies that ASP.NET makes a nightmare due to their cookie API. I ended up writing a conversion process that takes cookies from the request and makes my state object. At the end of the request I then translate my state object back to cookies and stuff them in the response (if needed). This alleviated trying to figure out if cookies are in the response, to update them instead, avoiding creating of pointless cookies etc.
Have you tired "Request" collection instead of "Response" collection?
if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))
I had a similar problem, I couldn't read cookies on postback. The issue for me was that I checked the Secure property of the cookie to true. It is said that when the Secure property of the cookie is turned on, it causes the cookie to be transmitted only if the connection uses the Secure Sockets Layer. I am not sure, however, how I was able to see the cookie in the browser the first time, but not on postback, considering that I wasn't transmitting over SSL. Anyhow, turning the cookie.Secure to false, solved the problem, and had cookies read on postback.
Sorry if this doesn't have to do anything with your issue, I wanted to share this, because I spent some time looking how to resolve this.
I think I know the answer.
Just REMOVE the action attribute in your <form> tag.
make it look like this: <form id="form1" runat="server">
instead of this: <form id="form1" action="DisplayName.aspx" runat="server">
You should then use Response.Redirect("DisplayName.aspx"); in your code.
if you're compiling in debug mode, turn on tracing for the pages in question and make sure the cookie is in the request collection. Set trace in the #page directive in the aspx file.
Try this snippet -
string locale = ((DropDownList)this.LoginUser.FindControl("locale"))
.SelectedValue;
HttpCookie myCookie = new HttpCookie("localization");
Response.Cookies.Add(myCookie);
myCookie.Values.Add("locale", locale);
Response.Cookies["localization"].Expires = DateTime.Now.AddYears(1);
& to read it -
if (Request.Cookies["localization"] != null)
{
HttpCookie cookie = Request.Cookies["localization"];
string locale = cookie.Values["locale"].ToString();
}
Would add this as a comment to Chris Marisic's answer but I don't have that privelage :-(
Further to what Chris said in his edit about removing cookies from the request, to be able to read the newly created cookies value in a postback I ended up doing
Private Sub SetPageSize(ByVal pageSize As Integer)
' Set cookie value to pageSize
Dim pageSizeCookie As HttpCookie = New HttpCookie(pageSizeCookieName)
With pageSizeCookie
.Expires = Now.AddYears(100)
.Value = pageSize.ToString
End With
' Add to response to save it
Me.Response.Cookies.Add(pageSizeCookie)
' Add to request so available for postback
Me.Request.Cookies.Remove(pageSizeCookieName)
Me.Request.Cookies.Add(pageSizeCookie)
End Sub
The Request.Cookies.Remove and Request.Cookies.Add lines making it work on postbacks
use Response.Cookies.Add(cookie); instead of Response.Cookies.Set(cookie);

Categories

Resources