Using ASP.NET to Make a Secure Site and Move Login Processing Out of the Page

by Matt Rutledge


A lot of us are tasked everyday to come up with ways of making our site, and other sites secure. Well if you're anything like me you don't want to have to rewrite login code 20 times a day. I'm going to show you how to make a secure site and have the login processing in a separate class. Let's get started.

In .NET to make a site secure is very simple, open up Web.Config file and look for the line that says <authentication mode="Windows" />. Delete that line and put in the following:


<authentication mode="Forms">
  <forms name="yourAuthCookie" loginUrl="login.aspx"
    protection="All" path="/" />

</authentication>
<authorization>
  <deny users="?" />
</authorization>

This now changes the way your web application will authenticate, it will no longer use NT security. Anybody trying to hit a page without authenticating first will be bounced back to the loginUrl that is specified.

Now I know a lot of you are thinking, but I have pages that aren't secure that I want the user to see. Well that is easy. After the <system.web> tag in your Web.Config file has ended put the following:


  <location path="test.aspx">

    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>

  </location>

This will allow any user, authenticated or not, to access that page only, if you have a whole directory you want anyone to access just put the directory name in the path, and I mean just the name no slashes or wildcards.

Now that we have a secure site we need to make the login page that we specified in the loginUrl.

Just a quick note, I am going to be using C# in this example with a SQL database and I will supply a code sample.

Start off by creating a webform and put your form fields in there. Use web controls for your fields not HTML controls.


<%@ Page language="c#" Codebehind="login.aspx.cs"
  AutoEventWireup="false" Inherits="secure.login" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
    <title>Secure Site</title>
    <meta content="Microsoft Visual Studio 7.0" name="GENERATOR">

    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5"

      name="vs_targetSchema">
  </HEAD>
  <body MS_POSITIONING="GridLayout">
    <form id="login" method="post" runat="server">

      <table cellSpacing="0" cellPadding="0" border="0">
      <tr>
        <td vAlign="top" align="left">

          <asp:label id="Message" Runat="server" ForeColor="#ff0000">
          </asp:label>
        </td>
      </tr>

      <tr>
        <td vAlign="top" align="left">
          <b>E-mail:</b>
        </td>

      </tr>
      <tr>
        <td vAlign="top" align="left">
          <asp:textbox id="username" Runat="server" Width="120">

          </asp:textbox>
        </td>
      </tr>
      <tr>
        <td vAlign="top" align="left">

          <b>Password:</b>
        </td>
      </tr>
      <tr>
        <td vAlign="top" align="left">

          <asp:textbox id="password" Runat="server"
            Width="120" TextMode="Password">
          </asp:textbox>

        </td>
      </tr>
      <tr>
        <td vAlign="top" align="left">
          <asp:checkbox id="saveLogin" Runat="server"

            Text="<b>Save my login</b>">
          </asp:checkbox>
        </td>
      </tr>
      <tr>

        <td vAlign="top" align="right">
          <asp:imagebutton id="btnLogin" Runat="server"
            ImageUrl="/images/w2k/login/btnLogin.gif">

          </asp:imagebutton>
        </td>
      </tr>
      </table>
    </form>
  </body>

</HTML>

Now in the code behind page create a click event for the login button.


private void InitializeComponent()
{    
  this.btnLogin.Click += new System.Web.UI.ImageClickEventHandler(this.btnLogin_Click);
  .
  .
  .
}

and put the function in.


    private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    {
      CCommonDB sql = new CCommonDB();
      string redirect = "";

      if((redirect = sql.AuthenticateUser(this.Session, this.Response,
        username.Text, password.Text, saveLogin.Checked)) != string.Empty)
      {
        // Redirect the user
        Response.Redirect(redirect);
      }
      else
      {
        Message.Text = "Login Failed!";
      }
    }

In this example I am actually returning a specified redirect, but if you would like to redirect them to the page that they came from you can always use: FormsAuthentication.RedirectFromLoginPage(…)

Here is the CCommonDB class that I use to authenticate users.

CCommonDB.cs

namespace secure.Components
{
  public class CCommonDB : CSql
  {
    public CCommonDB() : base() { }

    public string AuthenticateUser(
      System.Web.SessionState.HttpSessionState objSession, // Session Variable
      System.Web.HttpResponse objResponse,                 // Response Variable
      string email,                                        // Login
      string password,                                     // Password
      bool bPersist                                        // Persist login
      )
    {
      int nLoginID  = 0;
      int nLoginType  = 0;

      // Log the user in
      Login(email, password, ref nLoginID, ref nLoginType);

      if(nLoginID != 0)  // Success
      {
        // Log the user in
        System.Web.Security.FormsAuthentication.SetAuthCookie(nLoginID.ToString(), bPersist);

        // Set the session varaibles    
        objSession["loginID"]  = nLoginID.ToString();
        objSession["loginType"] = nLoginType.ToString();

        // Set cookie information incase they made it persistant
        System.Web.HttpCookie wrapperCookie = new System.Web.HttpCookie("wrapper");
        wrapperCookie.Value = objSession["wrapper"].ToString();
        wrapperCookie.Expires = DateTime.Now.AddDays(30);
      
        System.Web.HttpCookie lgnTypeCookie = new System.Web.HttpCookie("loginType");
        lgnTypeCookie.Value = objSession["loginType"].ToString();
        lgnTypeCookie.Expires = DateTime.Now.AddDays(30);

        // Add the cookie to the response
        objResponse.Cookies.Add(wrapperCookie);
        objResponse.Cookies.Add(lgnTypeCookie);

        return "/candidate/default.aspx";
          }
          case 1:  // Admin Login
          {
            return "/admin/default.aspx";
          }
          case 2:  // Reporting Login
          {
            return "/reports/default.aspx";
          }
          default:
          {
            return string.Empty;
          }
        }
      }
      else
      {
        return string.Empty;
      }
    }

    /// <summary>

    /// Verifies the login and password that were given
    /// </summary>
    /// <param name="email">the login</param>
    /// <param name="password">the password</param>

    /// <param name="nLoginID">returns the login id</param>
    /// <param name="nLoginType">returns the login type</param>
    public void Login(string email, string password, ref int nLoginID, ref int nLoginType)
    {
      ResetSql();

      DataSet ds = new DataSet();

      // Set our parameters
      SqlParameter paramLogin = new SqlParameter("@username", SqlDbType.VarChar, 100);
      paramLogin.Value = email;

      SqlParameter paramPassword = new SqlParameter("@password", SqlDbType.VarChar, 20);
      paramPassword.Value = password;


      Command.CommandType = CommandType.StoredProcedure;
      Command.CommandText = "glbl_Login";
      Command.Parameters.Add(paramLogin);
      Command.Parameters.Add(paramPassword);

      Adapter.TableMappings.Add("Table", "Login");
      Adapter.SelectCommand = Command;
      Adapter.Fill(ds);

      if(ds.Tables.Count != 0)
      {
        DataRow row = ds.Tables[0].Rows[0];

        // Get the login id and the login type
        nLoginID  = Convert.ToInt32(row["Login_ID"].ToString());
        nLoginType  = Convert.ToInt32(row["Login_Type"].ToString());
      }
      else
      {
        nLoginID = 0;
        nLoginType = 0;
      }
    }
  }

  abstract public class CSql
  {
    private SqlConnection sqlConnection;      // Connection string
    private SqlCommand sqlCommand;          // Command
    private SqlDataAdapter sqlDataAdapter;      // Data Adapter      
    private DataSet sqlDataSet;            // Data Set

    public CSql()
    {
      sqlConnection  = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
      sqlCommand    = new SqlCommand();
      sqlDataAdapter  = new SqlDataAdapter();
      sqlDataSet    = new DataSet();

      sqlCommand.Connection = sqlConnection;
    }

    /// <summary>

    /// Access to our sql command
    /// </summary>
    protected SqlCommand Command
    {
      get { return sqlCommand; }
    }

    /// <summary>
    /// Access to our data adapter
    /// </summary>
    protected SqlDataAdapter Adapter
    {
      get { return sqlDataAdapter; }
    }

    /// <summary>
    /// Makes sure that everything is clear and ready for a new query
    /// </summary>

    protected void ResetSql()
    {
      if(sqlCommand != null)
      {
        sqlCommand = new SqlCommand();
        sqlCommand.Connection = sqlConnection;
      }
      if(sqlDataAdapter != null)
        sqlDataAdapter = new SqlDataAdapter();

      if(sqlDataSet != null)
        sqlDataSet = new DataSet();
    }

    /// <summary>
    /// Runs our command and returns the dataset
    /// </summary>
    /// <returns>the data set</returns>
    protected DataSet RunQuery()
    {
      sqlDataAdapter.SelectCommand = Command;

      sqlConnection.Open();
      sqlConnection.Close();

      sqlDataAdapter.Fill(sqlDataSet);

      return sqlDataSet;
    }
  }
}

I have two classes here, a base class for the common sql functions that most of use normally do and then a class that inherits from that class to separate the code.

When you look at the code you may ask why do you pass the session variable and response variable into the function, well if you have ever tried to access the Session or Response variable from a separate cs class you always get an error saying that you need reference to the object, and in this case you can just pass the objects in and out easily and quickly without having to try to create your own instance of the Session or Response.

Matt Rutledge
www.datausa.com



About the Author

From ASP101

Articles originally posted on ASP101.com

Comments

  • Défrisants GHD stylers sont tous azimuts qui laisse les cheveux incroyablement belle et admirable

    Posted by xuxrgz165 on 07/16/2013 01:24am

    D'abord, vous devez savoir sur tout fer à lisser GHD est qu'ils offrent la même construction de haute qualité et de fiabilité qui a été marquée par la ghd lisseur pas cher ligne de. Ils comprennent le contrôle digital de la température, vous permettant de maintenir un contrôle précis sur le niveau de chaleur que vous utilisez. Ceci est important car les niveaux de chaleur pour obtenir les meilleurs résultats dans un type de cheveux peut être trop élevé pour d'autres types de cheveux. contrôle imprécis de la chaleur peut causer des dommages à la chaleur et les frisottis cela pourrait signifier et hår.For fou Deuxièmement, ils offrent également la distribution de chaleur douce. Chaque plaque GHD plaques d'aluminium de chauffe en céramique. Cela signifie que vous n'obtenez pas l'accumulation de chaleur dans une partie particulière d'un fer GHD. Encore une fois, cela signifie que les cheveux sont pas en danger d'être brûlés ou détruits par la chaleur en utilisant son style. [url=http://ghdpascherfer.hpage.com/]ghd lisseur prix[/url] Le site officiel du GHD a une liste de tous les sites frauduleux connus. Leur outil de vérification de site Web vous permet d'entrer une URL de vérifier pour voir si elle vend de véritables redresseurs. Sites autorisés auront également un badge "ghd approuvé en ligne détaillant" affiché sur leur site, vous devez vérifier qu'il affiche la date et l'heure la plus récente et l'adresse du site à droite pour s'assurer que les signes approuvés sont réels et ont été effectivement délivrés. [url=http://ghdpascherfer.hpage.com/]ghd lisseur prix[/url] Lisseur avec la technologie de pointe dans la kératine, assurez-vous de protéger l'éclat naturel de vos cheveux tout en style. Il est prêt à l'emploi indicateurs, les paramètres numériques avec réglable varmed pour obtenir un revenu régulier et un système de verrouillage simple pour oppbevaring.Profesjonell pratique simplement serrer avec plaques extra-longues pour un maximum d'impact sur ​​la température long / plein hÃ¥r.Tilpass pour cheveux céramique ditt.Høyresistent revêtement avec tourmaline pour de meilleurs résultats.

    Reply
  • the cheapest clarisonic pro with body dismiss on sale in the ebay

    Posted by iouwanzi on 06/05/2013 07:53pm

    [url=http://www.miaclarisonicaustralia.org/]clarisonic australia[/url] Den særlige er bedre end headset er ideelle til ipods på markedet, Apple iPhones og bærbare forskellige modeller af iPods. Disse mennesker giver den komplette lyd du rigtig skal lytte til. Opholder drevne øretelefoner derudover du erhverver øget volumen. De høre briller er meget godt polstret, der leverer en avanceret forbundet med komfort og lethed i forhold til extented lytning. Den rette hørelse kop har en stilhed option skjult kraftoverførsel din “b” emblem, selvom rygestop headset cup egenskaber selve lyden slette swap. [url=http://www.australiaclarisonic.com/clarisonic-pro]clarisonic pro[/url] IOC og LOCOG ikke havde reageret på en anmodning om at kommentere på tidspunktet for offentliggørelsen. Den officielle sponsor, der er mest tilbøjelige til at føle sig mest forurettede ved stunt er Panasonic.England fodboldspillere brugte Dr. Dre hovedtelefoner ved Euro 2012 for at undgå pressen. Hovedtelefonerne voksede i popularitet på Beijing 2008 Olympiske Lege, efter at selskabet gav dem til basketball stjerne LeBron James, og han gav dem ud til medlemmer af Team USA.Den baghold markedsføring initiativet kommer i hælene på en protest – iværksat af amerikanske sportsfolk, herunder 400m løber Sanya Richards-Ross – kritisere regel 40 i IOC adfærdskodeks. Reglen forbyder atleter fra at nævne deres personlige sponsorer på sociale medier under legene. [url=http://www.miaclarisonicaustralia.org/clarisonic-pro]clarisonic pro[/url] ikke blot disse hovedtelefoner kommer beriget med den nyeste teknologiske trends, men de kommer også i trendy stilarter og smukke farver, så de hårde dem kan vælge de hårde farver og resten som pr deres normale valg. Den stereoanlæg kvaliteten af hver af hovedtelefonerne er udestående. “Vi tror på kvalitet, og det er grunden til, vi tilbyder dem i den højeste kvalitet til de mest gennemførlige satser”, erklærede en af bestyrelsesmedlemmerne. Hovedtelefoner beats også omfatte en ny sort, der er på høje ender.Virksomheden ser en stigende kurve af overskud og tager sigte på at nå til en større del af det digitale samfund.

    Reply
  • Por qué planchas ghd son tan populares superventas ghd en España

    Posted by wanzilucky on 06/05/2013 07:46pm

    [url=http://comprar-ghd.manifo.com/]Comprar ghd[/url] ghd PINK Cherry Blossom styler es la novena Edición Limitada PINK de ghd dedicada a la investigación oncológica del cáncer de mama que, ha recaudado más de 7 millones de euros. que se lanza anualmente y de manera global en apoyo a la investigación oncológica del cáncer de mama, cuenta en España con el apoyo de una embajadora solidaria muy especial, la actriz Elsa Pataky que se involucra por tercer año consecutivo en el proyecto. [url=http://ghd-baratas.manifo.com/]ghd baratas[/url] Gracias a Twitter, he descubierto que algunos de ustedes estaban dispuestos a descubrir cuál es la diferencia entre el Cloud Nine y el ghd IV Styler fueron – y si valía la pena cambiar de lealtades o actualizar desde una alternativa más barata. Así que he creado esta tabla de comparación rápida que espero que le ayuda a tomar una decisión.Las mujeres han luchado por conseguir la perfección salón de golpe el cabello secado en su casa durante años. Mi cabello es grueso y recto, naturalmente, así que he estado en la búsqueda de un secador de pelo increíble que es bastante, pero se seca el pelo rápidamente y me da un poco de volumen. [url=http://ghd-baratas.manifo.com/]ghd baratas[/url] Para evitar un mayor daño hecho al cabello alisado, manténgase alejado de otras utilizando las herramientas de peinado con calor. Si estas herramientas son realmente necesario, usarlo con cuidado y con moderación.Este es el original plancha de pelo GHD MK4/IV que la gente les encanta. Además de sus propiedades de alta temperatura para alisar el cabello, la GHD IV también tiene un barril redondeado para crear una variedad de estilos diferentes, incluyendo bucles y ondas.

    Reply
  • Motor instructor Ergo Convertible Tote

    Posted by Lertemupeve on 05/30/2013 12:37pm

    Model Minute: Saara Sihvonen ELLE Model Minute: Saara SihvonenSeptember 10 10:59 AMby Kelley Hoffman 0 Comments Photo: Silent Models With her energetic personality and perfect skin, the 20 year-old Saara Sihvonen is proving [url=http://savebigshopping.com/]coach factory[/url] herself to be [url=http://savebigshopping.com/]coach factory[/url] one of a few rising stars to watch these week. Her elegant looks have already landed her at Doo.Ri and Helmut Lang—there will be many more—before she jets off to the European shows. We caught up with the psychology-loving Finnish girl to talk hot yoga, raw chocolate and her best celebrity sighting so far. ELLE: What's the coolest part of being in New York? SS: You can't even describe it—it's so nice! Especially Soho.  All the little restaurants and then the shopping and the people, of course, because the culture is really easy going.  You ask, "How are you?" and always have smiling faces, so I enjoy that. ELLE: What do you like to wear when you're not working? SS: Big clothes. Very loose ones. Just really not "model" clothes. ELLE: What about on your feet? SS: Now I have these Marc Jacobs wedges—they're so comfy and I can walk around in them. ELLE: What are your beauty tips? SS: I've always said skin, [url=http://savebigshopping.com/]coach factory[/url] skin, skin. I've always said when you take care of your skin everything works so much better. I always remove my makeup before I go to bed, even if it's so late—always. ELLE: Any products you're obsessed with? SS: I love Dermologica's daily microfoliant and sheer tint moisturizer. ELLE: What are your hobbies outside of fashion? SS: Friends, boyfriend, family. I'm traveling all the time so if I'm in Finland or if my boyfriend's in Singapore, I want to be with them. And I love hot yoga. ELLE: What are your go-to foods at fashion week to get you pumped? SS: If I have time to eat properly, I prefer salads. You can have amazing salads here in New York. Whole Foods have quite nice ones. If I don't have time to eat that, then I eat snack bars like granola, raisins. My good friend introduced me to raw chocolate, so if I have a really small piece I get really good energy. So if just before a show I'm starving I take a little piece of this chocolate and I'm on it again. ELLE: Have you walked in any shows today? SS: Yes, today was my first one, [url=http://savebigshopping.com/]coach factory[/url] Doo.Ri. It was such a nice moment. The clothes were amazing and I loved the music. ELLE: What was going [url=http://savebigshopping.com/]coach factory[/url] through your head when you were walking down the runway? SS: "This is my [url=http://savebigshopping.com/]coach factory[/url] first show, this is my first show, this is my first show. Ah! I'm so happy!" I think that was it. ELLE: Any unexpected moments so far this week? SS: One thing was, when I came to Soho, I was walking quite slowly because I saw a black car I couldn't really see inside, and then I saw Helen Mirren came out into the same hotel. She's so pretty! Click here to see all the spring shows! Tags: marc jacobs helmut lang Saara Sihvonen doo.ri dermalogica

    Reply
  • Ghd púrpura GHD Midnight Deluxe Peacock y tienen un buen mercado en Espaa a

    Posted by hanmeihm on 05/30/2013 05:37am

    [url=http://www.planchasespanaghdtop.net/plancha-pelo-ghd/]baratas ghd outlet[/url] Antes de cualquier estilo de calor, a menudo comienzan con una muy buena seguridad suero calor o aerosol. Cabello est¢ en su sano cuando hidratada y tenacillas para rizar, secadores de pelo y planchas para el pelo a todo seco y se deja sentir en affliction.It psimo es muy importante utilizar un buen par de buena calidad de las planchas cuando esperando para rizar el cabello. De lo contrario los alisadores pueden tal vez no te queme suficiente y mantenerse a una temperatura constante por mucho tiempo suficiente para realizar el mejor resultado. Usted puede obtener un par de planchas ghd baratos en lnea de una persona de los sitios de comparacin de costos ghd. [url=http://www.planchasespanaghdtop.net/plancha-pelo-ghd/]ghd baratas[/url] GHD rosa y GHD purple la indulgencia es la mejor plancha nunca! Tengo el pelo muy grueso, pero se haba vuelto muy escasa debido a la plancha para el cabello todos los de la rotura causada por el hierro plana. Desde entonces he estado utilizando el GHD he tenido virtualy sin roturas y mi pelo se ve muy sano y brillante. tambi¦n es muy rpido en hacer mi hari plana una creacin de grandes rizos. baratos alisadores de pelo ghd, por valor de Elsie dice: productos GHD son un regalo del cielo! Son absolutamente increble! Estara perdido sin ellos! Son fciles de usar, ligeras y hacer el trabajo! Yo no recomendara ninguna otra marca, excepto Planchas GHD! [url=http://www.ghdplanchasonline.manifo.com/]planchas ghd baratas[/url] Con varias nuevas caractersticas funcionales de las planchas de pelo GHD y planchas son simplemente magnfico para el estilo de su cabello. De las celebridades a la chica de al lado de los alisadores de pelo GHD son el gran favorito de todas las personas conscientes de la moda.

    Reply
  • Glattejern til ethvert behov,Pas pÃ¥ dit GHD glattejern

    Posted by wanzixiao on 05/30/2013 04:39am

    [url=http://www.ghdglattejern.tripod.com/]ghd danmark[/url] Få et glattejern som din frisør også ville bruge. De fleste frisør saloner har brug for unedbrydelige glattejern som ghd fladjern tilbud holder til at blive brugt hver eneste dag. Derfor har hoveddelen af saloner verden over valgt at benytte GHD glattejernene. [url=http://www.glattejernghd.bloguedobebe.com/]Billigt Glattejern[/url] Vores online butik handling, du den billigste og Billige GHD Styler. Nogle gange er det faktisk vigtigt for en babe at købe Ghd Sjældne Styler anon hos grossister, arcade online eller fordi yderligere ghd glattejern. Det er acceptabelt for typer af hår. [url=http://www.glattejernghdpris.webgarden.es/]glattejern ghd pris[/url] Når det er sagt, problem fremragende attributter for god hår dage Symbolformatering definitivt virkelig er deres egen person auto

    Reply
  • cheap authentic nike nfl jerseys,thailand arsenal jersey

    Posted by Incediaidelay on 05/06/2013 12:13pm

    By using modern supports, Mata by now this specific months Chelsea offered 32 supports (situations). This specific determine, might be completely assured Ma podium crowned European supports this specific months. In addition eighteen targets this specific months, the quantity of targets straight needed for Mata, arrived at 40. It is just a plenty of determine. Continue four week period, Benitez spoken within Mata explained: "he is due to frequent targets in addition to supports. For those who have any obtained eighteen targets, in addition to 29 supports (not one but two supports once) that striker, you is much like working with a facility. " His / her teammates, Zal within a good appointment by using "Daily Star" appointment explained: "and Juan perform along is actually in other words exciting, this individual belongs to the greatest players in the league, he can transfer more quickly compared to people to get consorts, in addition to put the tennis ball in the ft . regarding his / her teammates, he has this specific capacity. [url=http://shopnfljerseys.bravesites.com]wholesale soccer Jerseys[/url] He or she is elected player in the months. "Last few days, PFA explained the most beneficial months, that award attended Tottenham's Baer. Certainly, because the pillars in the Spurs, Baer is a very good player, nonetheless at present, that Spurs usually are not in the Champions League zoom. several nights after, they will special dialogue by using Chelsea in the league, earning an area within up coming season's Champions League locations. From another view, you can decide any benchmark: Basel. By using Baer, Tottenham, but is not to the Basel accounted with regard to a little less expensive, will be the Switzerland crew right out the Europa League; in addition to Chelsea appeared to be to the Basel are eligible, in to the Europa League remaining. Certainly, within He uk, "one loves what's his / her private. " the traditional nonetheless characterizes in the storage devices. In the 500 ballots in the PFA, local players, that reporter behoove to inhabit most, therefore, from Welsh Baer that they are elected, in addition to take a glance another persons: Van Persie (Holland), Suarez (Uruguay), Mata (Spain) in addition to Zal (The country) almost all unsuccessful. In actual fact, if not as early as Cristiano Ronaldo as well as Van Persie would continue months, inhabit totally obvious benefits in the opposition, foreign players to receive this specific award is actually considerable frustration. Baer appeared to be elected, nonetheless with his Uk light source (Baer Welsh). Baer is actually good, there is no good to put that Spurs in the Champions League, also not like this specific Ma podium, 62 shows in the months (this may not be the final 7-8 months in the Olympic Mmorpgs, 40 targets) in the great.

    Reply
  • More concessions with herveleger, more take two-time napping!

    Posted by comewloll on 05/02/2013 04:45am

    operation of san quentin quailhousemanbe in disposal withcharmvirtuoushawk

    Reply
  • More concessions with herveleger, more designate someone invest in on his!

    Posted by Mrtopflilze on 05/02/2013 03:32am

    wenchlittle shaverbe in focus withprotecteulogistichawk

    Reply
  • More concessions with herveleger, more take prisoner napping!

    Posted by rightmrjgg on 03/24/2013 02:27pm

    herve leger outlet herve leger outlet herve leger gown herve leger cheap herve leger on sale herve leger swimsuit herve leger clothing apple iphones for sale iphone for sale cheap iphone 4s accessories

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: October 29, 2014 @ 11:00 a.m. ET / 8:00 a.m. PT Are you interested in building a cognitive application using the power of IBM Watson? Need a platform that provides speed and ease for rapidly deploying this application? Join Chris Madison, Watson Solution Architect, as he walks through the process of building a Watson powered application on IBM Bluemix. Chris will talk about the new Watson Services just released on IBM bluemix, but more importantly he will do a step by step cognitive …

  • Live Event Date: November 20, 2014 @ 2:00 p.m. ET / 11:00 a.m. PT Are you wanting to target two or more platforms such as iOS, Android, and/or Windows? You are not alone. 90% of enterprises today are targeting two or more platforms. Attend this eSeminar to discover how mobile app developers can rely on one IDE to create applications across platforms and approaches (web, native, and/or hybrid), saving time, money, and effort and introducing apps to market faster. You'll learn the trade-offs for gaining long …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds