Dear All,
I faced a strange problem of maintaining session. We all know that we can maintain session and its timeout explicitly. Although we have this facility, but sometimes due to network disturbance the session gets expired and user has to come on the login or "yellow screen" again. Today, I am going to tell you how we can tackle this problem.
Step 1: I am taking one page which is dependent upon session. This page has a simple jquery code which calls a page through "HeartBeat" function. This function calls the page and sends the session in encrypted format which is again restored on the page. Thus it allows creation of session incase of any network fault or disturbance. Below is the code for the same.
in aspx html is
//your html code
//javascript code
<script src="Scripts/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
var sess = '<%=EncryptSession(Session["LoginName"].ToString())%>';
function HeartBeat() {
$.post("SessionPage.aspx", { 'sess': sess }, function (data) {
});
}
setInterval(HeartBeat, 5000);
</script>
in .cs file
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Session["SessionName"] = "testsession";
}
else
{
string sessionval = Session["SessionName"].ToString();
}
}
public static string passwordEncrypt(string inText, string key)
{
byte[] bytesBuff = Encoding.Unicode.GetBytes(inText);
using (Aes aes = Aes.Create())
{
Rfc2898DeriveBytes crypto = new Rfc2898DeriveBytes(key, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
aes.Key = crypto.GetBytes(32);
aes.IV = crypto.GetBytes(16);
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
cStream.Write(bytesBuff, 0, bytesBuff.Length);
cStream.Close();
}
inText = Convert.ToBase64String(mStream.ToArray());
}
}
return inText;
}
public static string EncryptSession(String s)
{
string enc = passwordEncrypt(s,"secretkeyword");
return enc;
}
Step 2: In another page named SessionPage.aspx, I have
In .cs file
public partial class SessionPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
String sess = Request.Params["sess"].ToString();
//This line restores the breaked session again
Session["SessionName"] = passwordDecrypt(sess,"secretkeyword");
Response.Write("Any message if you want to be returned");
Response.End();
}
public static string passwordDecrypt(string cryptTxt, string key)
{
cryptTxt = cryptTxt.Replace(" ", "+");
byte[] bytesBuff = Convert.FromBase64String(cryptTxt);
using (Aes aes = Aes.Create())
{
Rfc2898DeriveBytes crypto = new Rfc2898DeriveBytes(key, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
aes.Key = crypto.GetBytes(32);
aes.IV = crypto.GetBytes(16);
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(), CryptoStreamMode.Write))
{
cStream.Write(bytesBuff, 0, bytesBuff.Length);
cStream.Close();
}
cryptTxt = Encoding.Unicode.GetString(mStream.ToArray());
}
}
return cryptTxt;
}
}
Thanks
I faced a strange problem of maintaining session. We all know that we can maintain session and its timeout explicitly. Although we have this facility, but sometimes due to network disturbance the session gets expired and user has to come on the login or "yellow screen" again. Today, I am going to tell you how we can tackle this problem.
Step 1: I am taking one page which is dependent upon session. This page has a simple jquery code which calls a page through "HeartBeat" function. This function calls the page and sends the session in encrypted format which is again restored on the page. Thus it allows creation of session incase of any network fault or disturbance. Below is the code for the same.
in aspx html is
//your html code
//javascript code
<script src="Scripts/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
var sess = '<%=EncryptSession(Session["LoginName"].ToString())%>';
function HeartBeat() {
$.post("SessionPage.aspx", { 'sess': sess }, function (data) {
});
}
setInterval(HeartBeat, 5000);
</script>
in .cs file
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Session["SessionName"] = "testsession";
}
else
{
string sessionval = Session["SessionName"].ToString();
}
}
public static string passwordEncrypt(string inText, string key)
{
byte[] bytesBuff = Encoding.Unicode.GetBytes(inText);
using (Aes aes = Aes.Create())
{
Rfc2898DeriveBytes crypto = new Rfc2898DeriveBytes(key, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
aes.Key = crypto.GetBytes(32);
aes.IV = crypto.GetBytes(16);
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
cStream.Write(bytesBuff, 0, bytesBuff.Length);
cStream.Close();
}
inText = Convert.ToBase64String(mStream.ToArray());
}
}
return inText;
}
public static string EncryptSession(String s)
{
string enc = passwordEncrypt(s,"secretkeyword");
return enc;
}
Step 2: In another page named SessionPage.aspx, I have
In .cs file
public partial class SessionPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
String sess = Request.Params["sess"].ToString();
//This line restores the breaked session again
Session["SessionName"] = passwordDecrypt(sess,"secretkeyword");
Response.Write("Any message if you want to be returned");
Response.End();
}
public static string passwordDecrypt(string cryptTxt, string key)
{
cryptTxt = cryptTxt.Replace(" ", "+");
byte[] bytesBuff = Convert.FromBase64String(cryptTxt);
using (Aes aes = Aes.Create())
{
Rfc2898DeriveBytes crypto = new Rfc2898DeriveBytes(key, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
aes.Key = crypto.GetBytes(32);
aes.IV = crypto.GetBytes(16);
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(), CryptoStreamMode.Write))
{
cStream.Write(bytesBuff, 0, bytesBuff.Length);
cStream.Close();
}
cryptTxt = Encoding.Unicode.GetString(mStream.ToArray());
}
}
return cryptTxt;
}
}
Thanks
No comments:
Post a Comment
Comments are welcome, Please join me on my Linked In account
http://in.linkedin.com/pub/ritesh-tandon/21/644/33b