Bikash Shrestha
Bikash Shrestha

Reputation: 51

Access session in class library.

I am developing an application architecture that uses 2 sub projects: a) asp.net web application (it covers user interface and business logic) and b) class library. (it covers data access layer)

After system user successfully logs in , the user information is stored in a session object.

The problem I am facing is when I try to access that session object in class library project(data access layer), it always returns null.

I need to access the session object in class library project because, in my case each user has their own username and password for database access(for security reasons);

So, How how do i read and write from/to session object in class library project

Upvotes: 5

Views: 30059

Answers (5)

Ahmed Mohammed Fahmy
Ahmed Mohammed Fahmy

Reputation: 11

using System.Web;

namespace ClassNameSpace
{
    public class Class1 : IRequiresSessionState
    {
            private string sessionValue => HttpContext.Current.Session["sessionKey"].ToString();
    }
}

Upvotes: 1

FaheemMCFC
FaheemMCFC

Reputation: 21

I am having an ASP.Net application which uses session. I am able to access it in my app_code files using [WebMethod(EnableSession = true)] for the function. I am not sure whether this is your problem. I also faced session value as null when I removed (EnableSession = true) on the method.

Upvotes: 0

user1496412
user1496412

Reputation: 31

Here is the code I used within a library to get session information.

public static string Entity()
{
    string entity = "";
    HttpContext httpContext = HttpContext.Current;
    if (httpContext.ApplicationInstance.Session.Count > 0)
        entity = httpContext.ApplicationInstance.Session["EntityCode"].ToString();

    return entity;
}

Upvotes: 3

Giedrius
Giedrius

Reputation: 8540

First of all, as Peri correctly noticed - you need to think again if having separate database logins for each user is a good idea - because you loose connection pooling (different users won't be able to reuse existing connections - and creating a new sql connection is quite expensive).

If you really wish to keep separate database users, I would create interface to abstract session from data access:

public interface ILoginDataService
{
   LoginData Current { get; }
}

And implementation would pass login data from session. In such way you won't have session dependency to session in your data access logic - so it will be more testable, also you'll separate concerns.

Upvotes: 5

geekchic
geekchic

Reputation: 1566

Use the System.Web.HttpContext.Current.Session object.

Upvotes: 11

Related Questions