Wednesday, August 11, 2010

Implementing cookie for page redirect

Problem :
 
I have a requirement for the below scenario where I have to implement this using the browser cookies. This should be done using plain Html or Asp code.
 
E.g..  1 > User access www.example.com
      2 > In the landing page of www.example.com user will have another link for www.xyz.com.
      3 > User access the link in step 2.
      4 > User closes the browser.
      5 > Next time when the user access www.example.com  the user should be redirected to www.xyz.com directly.
 
 
 
Create a javascript file ‘cookieRedirect.js’ with following code
 
var expDays = 30;
var exp = new Date();
exp.setTime(exp.getTime() + (expDays*24*60*60*1000));
 
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
function SetCookie (name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) +
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure" : "");
}
function DeleteCookie (name) {
var exp = new Date();
exp.setTime (exp.getTime() - 1);
var cval = GetCookie (name);
document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}
 
var favorite = GetCookie('animal');
 
if (favorite != null) {
switch (favorite) {
case 'cat' :     url = 'cat.html'; // change these!
                 break;
case 'dog' :     url = 'dog.html';
                 break;
case 'gerbil' : url = 'gerbil.html';
                break;
case 'gopher' : url = 'gopher.html';
                break;
}
// window.location.href = url;
alert('You would have been taken to the ' + favorite + ' page (' + url + '), but this is just a demo!');
}
 
 
 
Add following lines to page HEAD
 
<script type="text/javascript" src="cookieRedirect.js"></script>
 
 
Add following lines to page Body
 
<form>
<table><tr><td>
Please choose your Favorite Pet:<br>
<input type=checkbox name="cat" onClick="SetCookie('animal', this.name, exp);">Cat<br>
<input type=checkbox name="dog" onClick="SetCookie('animal', this.name, exp);">Dog<br>
<input type=checkbox name="gerbil" onClick="SetCookie('animal', this.name, exp);">Gerbil<br>
<input type=checkbox name="gopher" onClick="SetCookie('animal', this.name, exp);">Gopher<br>
</td></tr>
</table>
</form>
<br>
(Choose an animal then <a href="cookie-redirect.html">reload</a> the page to see how the redirect works.)
 
 

Monday, August 9, 2010

Outlook 2007 | Asp.Net Interop

invoke the client machine's outlook by creating an ActiveX object using javascript. This way I do not need my application to intertop and install outlook on the server (which would not have met the requirement anyway). Also unlike "mailto" there is no restrcitiion of the length of the email and format of the email could be designed in HTML.
 
 
This javascript would then be registered using Script Manager as I am also using AJAX controls on the site. Here's the code snippet for anyone who has a similar problem to deal with in the future:
 
string script = "var objO = new ActiveXObject('Outlook.Application');var objNS = objO.GetNameSpace('MAPI'); var mItm = objO.CreateItem(0); mItm.Display(); mItm.To = ''; mItm.Subject = '" + EmailReader.LoadEmailSubjectTemplate(Convert.ToInt32(refId)) + "';mItm.HTMLBody = '" + EmailReader.LoadEmailBodyTemplate(Convert.ToInt32(refId)) + "'; mItm.GetInspector.WindowState = 2;";
            if (!ClientScript.IsStartupScriptRegistered(script))
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Nomination", script, true);
            }