Jeg har et lille problem nogen af jer derude måske kan hjælpe mig med.
Jeg har et userobjekt som kopieres ind i sessionsobjektet i en webform's codebehind ((User)Session["user"] = oUser)
Jeg vil nu gerne tilgå dette userobjekt fra en anden klasse, men jeg kan ikke tilgå mit sessionsobejekt da det ikke er en webform's codebehind jeg arbejder fra. dvs jeg kan ikke bare skrive User oUser = new User((User)Sesssion["user"]); hvad skal jeg gøre? Jeg er næsten 100% sikker på at jeg har alle de "using" med jeg behøver.
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Jeg har forresten lavet en overload af user som laver en shallowcopy i constructoren, så det er derfor jeg mener at det burde virke. public User(User OrgUser) { blnLoggedIn = OrgUser.blnLoggedIn; intId = OrgUser.intId; strFirstName = OrgUser.strFirstName; strLastName = OrgUser.strLastName; strEmail = OrgUser.strEmail; strPassword = OrgUser.strPassword; }
den anden klasse kan heller ikke tilgå sessionen, det er envejs kommunikation. Sessions objektet kan kopiere en instans af klasse til sig, men den kan kun tilgås via en codebehindting. dvs hvis jeg skal have id'et med over skal jeg kalde mit nye objekt udefra og smide en parameter med f.eks id'et som jeg har brug for, med. totalt åndsvagt, jeg håbede der var en nemmere måde.
Jeg mener nu at jeg engang har lavet noget lignende hvor jeg havde en klasse der ikke var codebehind men skulle bruge Session. Der mener jeg at jeg puttede nogle using statements ind i klassen (så den kendte til Session klassen) og gav en reference til session med i kaldet til klassen fra codebehind. Detvirkede fint...
Det er nemt nok at få data med, når man bare har en codebehind. Så kunne jeg for den sags skyld bare oprette et objekt som er en kopi af det der ligger i sessionsklasse, og smide det med som en parameter til min klasse. Det var lige det jeg ville undgå. Skulle bare høre om det kunne lade sig gøre at tilgå sessionen direkte fra min klasse, men det giver jo også mening at man ikke kan det. Det er en "webting" og det er jeg helle rikke interesseret i at have i min klasse. Desuden giver det også mening på den måde at sessionsobjektet ikke er instansieret når man bare arbejder i en alm klasse.
Du kan bruge følgende løsning: public class MySessionUtility { private static HttpSessionState GetSession() { return System.Web.HttpContext.Current.Session; } public static object GetSessionVar(string var) { HttpSessionState MySession = GetSession(); object SessionVaerdi = ""; if (MySession[var] != null) SessionVaerdi = (object) MySession[var]; return SessionVaerdi; } } Og fra den klasse hvori du vil hente en session variabel kan du bruge denne kald:
User oUser = (User)Util.HentSessionVal("user");
Du kan bare bruge koden
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.