Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Yheeky
Thema: KickCom - Fussball-Community zum Diskutieren von Fussballspielen
Am im Forum: Projekte

Hallo Achim,

danke für die Rückmeldung! Die mobile Version ist auch noch stark in der Beta, die sollte eigentlich noch nicht online sein ;-)
Aber danke für den Hinweis! Die mobile Seite kommt bald :-)

Viele Grüße,
Christian

Thema: KickCom - Fussball-Community zum Diskutieren von Fussballspielen
Am im Forum: Projekte

Hallo zusammen,

ich würde hier gerne mein neues Projekt KickCom vorstellen.
Bei dem Projekt handelt es sich um eine Fussball-Community, die zum Diskutieren von Fussballspielen einlädt. Bisher ist es als "Pilotprojekt" gestartet und startet am kommenden Dienstag den 26.06.2012 mit der 1.Fussball Bundesliga.
Die Plattform ist natürlich kostenlos und wird nicht über Werbung finanziert!

Homepage: http://www.kickcom.de
Infos: http://www.kickcom.de/Home/WasErwartetMich
Facebook: https://www.facebook.com/KickCom.de

Das Konzept

Als Fan einer Mannschaft verfolgt man natürlich gerne die Spiele seines Lieblingsvereins. Am meisten Spaß macht es, wenn man die Spiele nicht alleine verfolgen muss, sondern mit anderen Benutzern interagieren, in diesem Fall, diskutieren kann. Hier kommt die Plattform "KickCom" ins Spiel.

Nach der Anmeldung gelangt man in die Nachrichtenübersicht des Lieblingsvereins. Hier findet man Nachrichten, Transfergerüchte oder Trainingsberichte des Lieblingsclubs. Es findet lediglich eine interne Diskussion untereinander statt. Möchte man mit Fans von anderen Clubs diskutieren, stehen die Fanlager zur Verfügung. Hier können sich alle Benutzer untereinander austauschen.

Jeder Benutzer kann an einem Spieltag die Partie seiner Wahl verfolgen - am ehesten natürlich die des eigenen Vereins.  Um der Partie beizuwohnen, muss der Benutzer - wie im echten Leben - ein Ticket lösen (kostenlos). Dann ist man berechtigt bei der Diskussion dieses Spiels teilzunehmen und mit den eigenen, aber auch den Gästefans für Stimmung zu sorgen.
Wenn man sich im Vorfeld intensiv mit der Begegnung befasst hat, kann man sein Wissen mit den anderen Benutzern teilen und einen sogenannten Vorbericht erstellen. Hier werden alle gesammelten Informationen in einem eigens verfassten Text zusammengeschrieben und informiert die Community mit allen Informationen, die es zu dem Spiel zu wissen gibt. Abschließend kann der Vorbericht von den Benutzern zum Vorbericht des Spiels gewählt werden.
Wenn ihr euch jetzt noch als Fussballkenner zeigen möchtet, könnt ihr einen Tipp bezüglich des Ausgangs der Partie abgeben. 
Die Anzahl deiner verfolgten Spiele, deine erstellten Vorberichte, sowie die Erfolgsquote deiner Tipps werden in deinem persönlichen Profil angezeigt und geben an, ob du Fussballsachverstand besitzt!

Einen Bezug zu diesem Forum hat sie auch. Die Webanwendung habe ich in .NET mit dem MVC Framework entwickelt.

Wäre schön, wenn ihr mal vorbeischauen würdet und die Seite mal ein bisschen mit Leben füllt.

Vielen Dank fürs Lesen!

Viele Grüße,
Christian

Thema: MVC: Angemeldet bleiben realisieren
Am im Forum: Web-Technologien

Ich habe gerade was gemerkt, was ziemlich faul ist. Ich habe beim Login folgenden Code:


            FormsAuthentication.SetAuthCookie(username, rememberMeBool);
           
            if (rememberMeBool)
            {
                var createdCookie = FormsAuthentication.GetAuthCookie(username, true);
                createdCookie.Expires = DateTime.Now.AddYears(10);
                Response.Cookies.Add(createdCookie);
            }

Der Cookie hat ein Expires-Datum von 2022! Beim nächsten Request springt der Debugger in AuthorizationCode und wenn ich in der Identity nach dem Ticket schaue, steht da wieder 2012, mit einem Expires-Datum was eine Minute höher ist, wie die aktuelle Zeit (Timeout von 1 in web.config).
Er merkt sich das also im Cookie irgendwie nicht

Kann doch nicht so schwer sein, sowas zu implementieren...

Thema: MVC: Angemeldet bleiben realisieren
Am im Forum: Web-Technologien

Ich habe den Timeout in der web.config mal aus Spaß auf 1 gesetzt. Wenn ich nun länger als 1 Minute warte und per Breakpoint ins Programm gehe, gibt es irgendwas, was den Timeout verschiebt, obwohl ich das nun so umgestellt habe, dass ich quasi GARNICHTS mache. Normalerweise müsste doch der Timeout verfolgen, das Ticket abgelaufen sein (IsAuthenticated = false) etc...ich verstehe wirklich nicht, was da passiert!
Hier mal meine relavanten Dateien:

web.config:


<configuration>
    <.....>
    <system.web>
        <.....>
        <authentication mode="Forms">
      <forms loginUrl="~/Home/Index"
             timeout="1"
             defaultUrl="~/Home/Index"
             slidingExpiration="true"
             protection="All"
             enableCrossAppRedirects="false"
             cookieless="AutoDetect"/>
    </authentication>
        <!-- Machine Key for timeout cookie required ! -->
        <machineKey validationKey="key here"
                    decryptionKey="key here"
                    validation="SHA1"
                    decryption="AES" />
        <membership defaultProvider="MeinProvider">
            <providers>
                <clear />
                <add name="MeinProvider"
                     type="Solution.Models.MeinProvider" />
            </providers>
        </membership>
            <.....>
    </system.web>
        <.....>
</configuration>

Einen RoleProvider brauche ich nicht. Einen "MeinProvider" habe ich relativ "nackt" erstellt und sieht so aus:

using System;
using System.Web.Mvc;
using System.Web.Security;
using System.Text;

namespace Solution.Models
{
    public class MeinProvider : MembershipProvider
    {
        public override string ApplicationName
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public override bool ChangePassword(string username, string oldPassword, string newPassword)
        {
            throw new NotImplementedException();
        }

        public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
        {
            throw new NotImplementedException();
        }

        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
            throw new NotImplementedException();
        }

        public override bool DeleteUser(string username, bool deleteAllRelatedData)
        {
            throw new NotImplementedException();
        }

        public override bool EnablePasswordReset
        {
            get { throw new NotImplementedException(); }
        }

        public override bool EnablePasswordRetrieval
        {
            get { throw new NotImplementedException(); }
        }

        public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
        {
            throw new NotImplementedException();
        }

        public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
        {
            throw new NotImplementedException();
        }

        public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
        {
            throw new NotImplementedException();
        }

        public override int GetNumberOfUsersOnline()
        {
            throw new NotImplementedException();
        }

        public override string GetPassword(string username, string answer)
        {
            throw new NotImplementedException();
        }

        public override MembershipUser GetUser(string username, bool userIsOnline)
        {
            throw new NotImplementedException();
        }

        public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
        {
            throw new NotImplementedException();
        }

        public override string GetUserNameByEmail(string email)
        {
            throw new NotImplementedException();
        }

        public override int MaxInvalidPasswordAttempts
        {
            get { throw new NotImplementedException(); }
        }

        public override int MinRequiredNonAlphanumericCharacters
        {
            get { throw new NotImplementedException(); }
        }

        public override int MinRequiredPasswordLength
        {
            get { throw new NotImplementedException(); }
        }

        public override int PasswordAttemptWindow
        {
            get { throw new NotImplementedException(); }
        }

        public override MembershipPasswordFormat PasswordFormat
        {
            get { throw new NotImplementedException(); }
        }

        public override string PasswordStrengthRegularExpression
        {
            get { throw new NotImplementedException(); }
        }

        public override bool RequiresQuestionAndAnswer
        {
            get { throw new NotImplementedException(); }
        }

        public override bool RequiresUniqueEmail
        {
            get { throw new NotImplementedException(); }
        }

        public override string ResetPassword(string username, string answer)
        {
            throw new NotImplementedException();
        }

        public override bool UnlockUser(string userName)
        {
            throw new NotImplementedException();
        }

        public override void UpdateUser(MembershipUser user)
        {
            throw new NotImplementedException();
        }

        public override bool ValidateUser(string username, string password)
        {
            if ((from d in new DatabaseDataContext().Benutzer where d.Benutzername == username && d.Passwort == password select d).Any())
            return true;
			
			return false;
        }
    }
}

Und ein AuthorizeAttribute habe ich auch noch erstellt:


using System;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;

namespace Solution.Models
{
    public sealed class MeinAuthorizeAttribute : AuthorizeAttribute
    {
        public new string Roles;

		private string GetRoleForUser(string username)
        {
            return (from u in new DatabaseDataContext().Benutzer
                    where u.Benutzername == username
                    select u.Rolle).FirstOrDefault();
        }
		
        public MeinAuthorizeAttribute()
        {
		
        }

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (httpContext == null)
                return false;

            if (!httpContext.User.Identity.IsAuthenticated)
                return false;

            var personRole = GetRoleForUser(httpContext.User.Identity.Name);

            return Roles.Contains(personRole);
        }

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext == null)
            {
                throw new ArgumentNullException("filterContext");
            }

            if (AuthorizeCore(filterContext.HttpContext))
            {
                // ** IMPORTANT **
                // Since we're performing authorization at the action level, the authorization code runs
                // after the output caching module. In the worst case this could allow an authorized user
                // to cause the page to be cached, then an unauthorized user would later be served the
                // cached page. We work around this by telling proxies not to cache the sensitive page,
                // then we hook our custom authorization code into the caching mechanism so that we have
                // the final say on whether a page should be served from the cache.
                var cachePolicy = filterContext.HttpContext.Response.Cache;
                cachePolicy.SetProxyMaxAge(new TimeSpan(0));
                cachePolicy.AddValidationCallback(CacheValidateHandler, null);

                if (!HttpContext.Current.Request.RawUrl.StartsWith("/Ajax/"))
                {
                    //var createdCookie = FormsAuthentication.GetAuthCookie(HttpContext.Current.User.Identity.Name, true);
					//createdCookie.Expires = DateTime.Now.AddDays(1);
					//Response.Cookies.Add(createdCookie);
                }
            }
            else
            {
                filterContext.HttpContext.Response.Redirect("/Home/NotLoggedIn");
                filterContext.Result = new ContentResult();
            }
        }
    }
}

Aufgerufen werden alle Funktionen in den Controllern nach folgendem Schema:


[MeinAuthorizeAttribute(Roles = "Administrator,Benutzer")]
        public ActionResult Index()
        {
            return View();
        }

Ich bin echt ratlos X(

Thema: MVC: Angemeldet bleiben realisieren
Am im Forum: Web-Technologien

Zitat von Abt
Du machst Dir einen eigenen MemberShipProvider zusammen mit einem CustomAuthorizeAttribute. Weiß nicht, ob das CustomAuthorizeAttribute alleine ausreicht. Hab ich grad nicht im Kopf.

Anschließend kannst Du OnAuthorization überschreiben und Deine Anfrage nach Ajax/Nicht Ajax auswerten und den Timeout hochsetzen.

Das habe ich doch gemacht und auch oben dargestellt. Ich habe einen BaseController, der bei jedem Request (in meinem Fall Seitenaufruf) gefeuert wird. Die normalen Controller werden von BaseController abgeleitet. Alle Ajax-Aufrufe gehen in den AjaxController, der eben kein Event feuert. Vom Prinzip her funktioniert also die Unterscheidung von Ajax und Nicht-Ajax Aufruf.
Nur bekomme ich es nicht hin, dass ein Benutzer angemeldet bleibt.

Was ich allerdings nicht verstehe: beim Einloggen wird der Timeout durch mein Ticket (s. oben im ersten Posting) auf 525600 gesetzt von daher sollte das Ticket ja folglich auch nicht ablaufen. Irgendetwas sorgt allerdings dafür, dass das Ticket abläuft, obwohl der Timeout so hoch ist - das verstehe ich nicht.

Thema: MVC: Angemeldet bleiben realisieren
Am im Forum: Web-Technologien

Zitat von Abt
Das ist kein Problem.
Kann man auch mit nem Attribut an einem Controller / Action steuern, sodass Du sogar entscheiden kannst, welche Action ein Timeout verlaengert und welches nicht.
Ja, aber dann muss ich das doch manuell weiterschieben ;-)

Hast du ein Beispiel von dem was du meinst?

Thema: MVC: Angemeldet bleiben realisieren
Am im Forum: Web-Technologien

Hi Abt,

ich hatte mich ja für den manuellen Weg entschieden gehabt, weil ich viele AJAX-Calls verwende und da jedes Mal der Timeout weitergeschoben wird, auch wenn der Benutzer kein "Angemeldet bleiben" ausgewählt hat.
Was mich nun aber noch stutzig macht. Es gibt soviele Stellen, wo von einem Timeout gesprochen wird. Wo sind denn da die Unterschiede?

  1. web.config: <forms timeout="10">
  2. web.config: <membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="10">
  3. var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
    {
    Expires = DateTime.Now.AddMinutes(timeout),
    HttpOnly = true
    };
  4. Session.Timeout = 10;

Ich bin irgendwie verwirrt, wo man den überall setzen muss, wo man Hilfestellungen bekommt etc...
Habe leider auch keine aufschlussreichen Tutorials gefunden, die mir da groß weiterhelfen.

Wäre super, wenn du dazu noch was schreiben könntest.

Danke und Gruß,
Yheeky

Thema: MVC: Angemeldet bleiben realisieren
Am im Forum: Web-Technologien

Mhmm wieder ausgeloggt :-(
Scheint doch noch irgendwo zu haken...noch eine Idee?

Thema: MVC: Angemeldet bleiben realisieren
Am im Forum: Web-Technologien

Cool danke! Habs jetzt mal eingebaut (man muss doch außer dem MachineKey in der web.config nichts machen, oder?) und bisher funktioniert es. Habe die Seite nach einer Stunde wieder aufgemacht und war noch eingeloggt

Vielen Dank nochmal!
Gruß Yheeky

Thema: MVC: Angemeldet bleiben realisieren
Am im Forum: Web-Technologien

Zitat von Abt
Hast Du den <machineKey /> in der Web.Config gesetzt? Erst dann funktioniert ein Remember.
Nee, den habe ich nicht gesetzt. Wie muss ich den denn setzen und wieso funktioniert es dann lokal?

Thema: MVC: Angemeldet bleiben realisieren
Am im Forum: Web-Technologien

Hi,

ich habe in meiner MVC-Anwendung eine Funktion "Angemeldet bleiben" implementiert. Ich möchte, dass der Benutzer sich nicht jedes Mal anmelden muss, wenn er auf meine Seite kommt (und er natürlich den Haken gesetzt hat). Dies funktioniert lokal auch hervorragend, jedoch nicht auf meinem Webserver.
Weiss jemand woran das liegen könnte?

Hier die Art und Weise, wie ich das mache:

Beim Login wird diese Funktion aufgerufen:

var rememberMeBool = rememberMe == "on" ? true : false;
var timeout = rememberMeBool ? 525600 : 10;
var authTicket = new FormsAuthenticationTicket(username, rememberMeBool, timeout);
var encryptedTicket = FormsAuthentication.Encrypt(authTicket);
var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
	{
		Expires = DateTime.Now.AddMinutes(timeout),
        HttpOnly = true
    };
Response.Cookies.Add(authCookie);

HttpContext.User = new GenericPrincipal(new FormsIdentity(authTicket), new[] { String.Empty });

Session["LastAction"] = DateTime.Now;
Session.Timeout = 10;

Bei jedem Seitenaufruf überprüfe ich, ob die "LastAction" in der Session älter ist, als der gesetzte Timeout.

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var sessionDate = new DateTime();

    if (Session["LastAction"] != null)
    DateTime.TryParse((Session["LastAction"]).ToString(), out sessionDate);
	
    if (HttpContext.User.Identity.IsAuthenticated)
    {
        Session["LastAction"] = DateTime.Now;
	}
}

Ich kann in dem Fall nicht die Standardfunktionalität der FormsAuthentication nutzen, da ich viele AJAX-Aufrufe in meiner Webseite habe (auch welche mit Interval), die natürlich die Session automatisch verlängern und somit nie auslaufen lassen.
Die Session benutze ich also, um die wirkliche Inaktivität herauszufinden.

Ich hoffe mir kann jemand bei dem Problem behilflich sein.

Danke schonmal und viele Grüße,
Yheeky

Thema: Regex - Mehrfachsuche [= Suche nach Alternativen (a oder b)]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

ich möchte in meiner Anwendung ein Suchfeld anbieten und dafür habe ich RegEx verwendet, um meine Datenbank nach passenden Einträgen zu durchsuchen.
Die Verwendung von ? und * funktioniert schon wunderbar, nur hätte ich gerne noch eine Unterstützung, wie man nach mehreren verschiedenen Einträgen suchen kann.

Beispiel:
Ich suche nach "*pel" - so wird mir "Opel" geliefert.
Ich suche nach "*wagen" - so wird mir "Volkswagen" geliefert.

Jetzt brauche ich ein Denkanstoß, damit ich beide irgendwie in einer Suche verknüpfen kann, damit ich sowas wie "*pel + *wagen" eingeben kann und ich "Opel" und "Volkswagen" zurückbekomme.

Hat da jemand eine Idee oder - noch besser - ein Beispiel, wie man das umsetzen könnte?

Danke schonmal und Gruß,
Yheeky

Thema: [MS SQL] Funktion aufrufen, wenn Timestamp erreicht wird
Am im Forum: Datentechnologien

Klingt nach einer guten Idee! DANKE!
Wenn die Datensätze mehr werden (was erstmal nicht abzusehen ist) kann ich immer noch über eine andere Variante nachdenken.

Gruß Yheeky

Thema: [MS SQL] Funktion aufrufen, wenn Timestamp erreicht wird
Am im Forum: Datentechnologien

Hi,

ich habe eine SQL Server 2008 R2 Datenbank mit der ich arbeite und suche momentan nach einer Möglichkeit, wie ich folgende Funktionalität umsetzen kann.
Ich habe eine Tabelle in der wöchentlich ca. 30 Einträge hinzukommen. Für diese 30 Einträge gibt es jeweils ein Attribut, welches ein zukünftiges Datum enthält.
Ich suche nun nach einer Möglichkeit, eine Funktion auszuführen, wenn genau das Datum aus einem Datenbank (inkl. Zeitstempel) erreicht wird. Gibt es eine solche Funktion oder muss ich permanent einen Job laufen lassen, der das prüft?

Danke schonmal für die Antworten!
Gruß Yheeky

Thema: MVC: Html-Code per AJAX zur Anwendung schicken - Gefährlicher Request
Am im Forum: Web-Technologien

Hi Abt,

danke für die Links!
Nun funktioniert es. Es reicht doch eigentlich aus, wenn ich bei der Validierung "<script>" und "<link>" elemente nicht zulasse oder? Ansonsten kann man ja nicht wirklich viel mit machen, oder täusche ich mich?

Danke nochmal und Gruß,
Yheeky

Thema: MVC: Html-Code per AJAX zur Anwendung schicken - Gefährlicher Request
Am im Forum: Web-Technologien

Hi,

ich arbeite an einer Anwendung basierend auf dem MVC.
Ich habe bereits viele AJAX Aufrufe über jQuery realisiert. Nun stoße ich auf ein Problem:
Ich möchte dem Benutzer ermöglichen HTML-Code in der Datenbank abzulegen. Korrekterweise schlägt die Anwendung Alarm (was ja gut ist). Nun möchte ich diesen jedoch deaktivieren und die Validierung selbst vornehmen. Ein ValidateRequest="false" in der Page-Anweisung bringt leider nichts.
Desweiteren bringt es auch nichts, den eigentlichen Textstring in ein Objekt zu stecken und das per AJAX zu übertragen...wird trotzdem anerkannt (was auch gut ist an sich ;)).
Gibt´s eine Möglichkeit, wie ich den String relativ einfach übertragen kann?

Danke schonmal für die Hilfe!

Gruß Yheeky

Thema: Timeout-Problem mit FormsAuthentication und Ajax
Am im Forum: Web-Technologien

Ich möchte nicht nur eine Art Onlineliste realisieren sondern ich möchte auch implementieren, dass ein Benutzer per E-Mail über neue Nachrichten informiert wird, wenn er nich mehr eingeloggt ist. Dabei könnte ich beim Absenden einer Nachricht prüfen lassen, wie lange die letzte Aktion des Empfängers schon her ist und demnach entscheiden, ob er Benutzer z.B. per E-Mail benachrichtigt wird, da er nicht als "Online" angenommen wird oder er direkt über die Webseite informiert wird.
Alles nicht so einfach! ;-)

Thema: Timeout-Problem mit FormsAuthentication und Ajax
Am im Forum: Web-Technologien

Hi,

ich verstehe aber nicht, wie man das Problem mit dem Schließen des Browsers lösen könnte
Oder meintest du, dass bei OnActionExecuting alle eingeloggten Benutzer überprüft werden, ob sie beispielsweise in den letzten 30 Minuten eine Aktion hatten? Dies würde ja nur funktionieren, wenn sich immer ein Benutzer eingeloggt hat, ansonsten funktioniert das ja auch nicht.

Thema: Timeout-Problem mit FormsAuthentication und Ajax
Am im Forum: Web-Technologien

Ok, habe ich jetzt soweit eingebaut 8)
Mein Problem ist jetzt nur noch: wenn ein Benutzer die Seite verlässt, ohne, dass er auf "Ausloggen" geht, bin ich ja immer noch auf den Session/FormsAuthentication Timeout angewiesen, oder? Oder gibt´s ne andere Möglichkeit beim Schließen des Browsers noch eine letzte Aktion auszuführen und den Benutzer in der Datenbank auf Offline zu setzen?
Eine alternative Möglichkeit wäre ein DB-Job, der regelmäßig ausgeführt wird, aber das kostet Performance und das möchte ich vermeiden

Gruß Yheeky

Thema: Timeout-Problem mit FormsAuthentication und Ajax
Am im Forum: Web-Technologien

Hi,

@MarsStein: danke erstmal für deinen Post und die Idee :) ich habe sowas sogar schonmal in einem anderen Projekt ähnlich gelöst, aber in dem Fall habe ich den Wald vor lauter Bäumen nicht gesehen ;)

@Abt: Ich verwende in der Tat das MVC ;)
Ich habe meine Controller so aufgebaut, dass ich die normalen Aufrufe implementiert habe (Index, Edit, Details, etc...) und eben die WebMethoden mit [HttpPost] Attribut. Du sprichst von einem Aufbau nach dem Nested-Singleton und einem separataten Ajax-Controller. Ich denke ich weiss, was du meinst, aber um sicher zu gehen schreibe ich nochmal auf, wie ich es verstanden habe ;)

Die gewöhnlichen Aufrufe (Index, Edit, Details) der einzelnen Seiten gehen über die herkömmlichen Controller (Home, Benutzer, Nachrichten bzw. Home/Index, Benutzer/Index, Nachrichten/Index etc.). Dann erstelle ich einen Controller, der NUR mit Ajax-Aufrufen umgeht. Dieser beinhaltet keine OnActionExecution Methode, weil der Timeout nicht neu gesetzt werden muss, richtig?

Nun ist es ja aber so, dass das FormsAuthenticationTicket nur zum Lesen freigegeben ist...wie muss ich das denn dann erweitern? Neu instanziieren und zuweisen bzw. überschreiben?

Danke schonmal an euch!

Gruß Yheeky

Thema: Timeout-Problem mit FormsAuthentication und Ajax
Am im Forum: Web-Technologien

Hi,

ich habe eine Webseite mit FormsAuthentication und habe in der web.config testweise einen Timeout von 1 Minute gesetzt.

<authentication mode="Forms">
      <forms loginUrl="~/Home/Index"
             timeout="1"
             defaultUrl="~/Home/Index"
             slidingExpiration="true"
             protection="All"
             enableCrossAppRedirects="false" />
    </authentication>

Ich habe in diversen Artikeln gelesen, dass dieser Wert jedoch nicht immer eine Auswirkung hat. Deswegen habe ich beim Login das FormsAuthenticationTicket selbst gesetzt:

var ticket = new FormsAuthenticationTicket(
                        1,
                        username,
                        DateTime.Now,
                        DateTime.Now.AddMinutes(1),
                        false,
                        String.Format("{0},{1}", username, password),
                        FormsAuthentication.FormsCookiePath
            );

            var encryptedTicket = FormsAuthentication.Encrypt(ticket);
            var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
            {
                HttpOnly = FormsAuthentication.RequireSSL,
                Path = FormsAuthentication.FormsCookiePath,
                Domain = FormsAuthentication.CookieDomain
            };
            Response.AppendCookie(cookie);

Das Problem ist nun, dass der Timeout NIE kommt! Ich habe längere Zeit überlegt und bin dann auf die Idee meiner AJAX-Calls gekommen. Ich lasse nämlich, wenn ein Benutzer eingeloggt ist, alle 10 Sekunden überprüfen, ob er neue Nachrichten im Postfach hat.

Ist es nun so, dass dieser Request immer dafür sorgt, dass das Timeout neu gesetzt wird? Wenn dem so ist: wie kann ich bei einer Anwendung, die AJAX-Calls verwendet, trotzdem einen Timeout hevorrufen lassen?
Ich hätte gerne eine Online/Offline Funktion und die funktioniert momentan natürlich so nicht.

Bin für jeden Tipp dankbar!

Gruß Yheeky

Thema: [LINQ] Letzte Nachricht aus Nachrichten-Konversation herausfinden
Am im Forum: Datentechnologien

Also ich habe es jetzt gelöst und zwar mit einem foreach.
Folgenden Workaround habe ich gemacht.

Ich habe mir erst die Benutzer geholt, mit denen der aktuelle Benutzer eine Konversation hatten:

var query = (from k in Konversationen
                         where (k.BenutzerId_Empfänger == benutzerId)
                         orderby k.Datum descending
                         select k.BenutzerId_Sender).Distinct();

Dann bin ich diese Benutzer per foreach durchgegangen, habe alle Nachrichten aus der DB geholt, die mit der Konversation zu tun haben.

foreach (var queryItem in query)
{
	var newestItem = (from k in Konversationen
					   where
						   (k.BenutzerId_Sender == queryItem  && k.BenutzerId_Empfänger == benutzerId) ||
						   (k.BenutzerId_Sender == benutzerId && k.BenutzerId_Empfänger == queryItem)
					   select k).OrderByDescending(d => d.Datum).First();

	returnListe.Add(newestItem);
}

Die returnListe enthält dann alle Daten, die ich gesucht habe :-)


EDIT:
Ich habe die foreach nun durch eine Lambda-Expression ersetzt:

return query.Select(queryItem => (from k in Konversationen
                                 where (k.BenutzerId_Sender == queryItem && k.BenutzerId_Empfänger == benutzerId) || (k.BenutzerId_Sender == benutzerId && k.BenutzerId_Empfänger == queryItem)
                                 select k).OrderByDescending(d => d.Datum).First()).ToList();


Danke für eure Hilfe!

Gruß Yheeky

Thema: [LINQ] Letzte Nachricht aus Nachrichten-Konversation herausfinden
Am im Forum: Datentechnologien

Das geht so nicht.

Zitat
-> Inhalt nach Datum sortieren
Das hat er doch oben auch schon gemacht. Dann bekomme ich eine Liste, die so aussieht:

1, 3, Hi, how are you?, 05.06.2011 01:40
2, 1, Wie geht´s dir?, 05.06 01:38

1, 2, Hi zurück, 05.06.2011 01:35
3, 1, Hi there, 05.06.2011 01:33
2, 1, Hi, 05.06.2011 01:30
Zitat
-> gfoidl's Linq Ausdruck verwenden

Damit bekomme ich die Konversation des letzten Partners, aber nicht alle letzten Konversationen. Ich möchte quasi die dick-markierten Einträge in dem Fall bekommen.
Jede Konversation hat ja logischerweise zwei beteiligte Benutzer. Wer von beiden zuletzt geschrieben hat, ist egal. Es soll im eigenen Profil angezeigt werden. Es müsste quasi ein DISTINCT gemacht werden, bei dem aber 1, 2 und 2, 1 als eins behandelt werden...weiss aber nicht, wie ich das umsetzen könnte.

Gerne könnte ihr mir auch in Form von T-SQL helfen, dann kann ich das vielleicht auch umsetzen.

Das Prinzip wird übrigens u.a. auch bei Facebook verwendet. Nur falls es noch etwas unklar ist, was ich genau will. Vielleicht konnte ich mich bisher noch nicht so gut ausdrücken :)

Thema: [LINQ] Letzte Nachricht aus Nachrichten-Konversation herausfinden
Am im Forum: Datentechnologien

Hi,

danke erstmal für die schnelle Antwort zu später/früher Stunde ;)
Das war aber leider nicht das was ich gesucht habe. Ich habe es aber auch nicht genau ausgedrückt ;)
Gehe nicht von den Daten aus dem ersten Posting aus, sondern von diesen hier:

2, 1, Hi, 05.06.2011 01:30
1, 2, Hi zurück, 05.06.2011 01:35
2, 1, Wie geht´s dir?, 05.06 01:38
3, 1, Hi there, 05.06.2011 1:33
1, 3, Hi, how are you?, 05.06.2011 01:40

Nun stelle dir vor, ich wäre der Benutzer mit der ID 1. Ich gehe in den Posteingang und dort sollen nun ALLE meine Konversationen aufgelistet werden, nicht nur die letzte! Es soll auf der Hauptseite von jeder einzelnen Konversation die letzte Nachricht angezeigt werden, damit man weiss, was die letzte Nachricht in der Konversation war. Bei den obrigen Daten wäre das:

Konversation zwischen 1 und 2:
Wie geht´s dir?, 05.06 01:38

Konversation zwischen 1 und 3:
Hi, how are you?, 05.06.2011 01:40

Nun dürfte sich das Ganze noch etwas schwieriger gestalten, nehme ich an ;)
Ich habe es leider noch nicht hinbekommen...vielleicht hast du ja noch eine Idee.

Gruß Yheeky

Thema: [LINQ] Letzte Nachricht aus Nachrichten-Konversation herausfinden
Am im Forum: Datentechnologien

Hi,

ich habe eine MSSQL-Datenbank und eine Nachrichten-Tabelle.
Über meine Webseite können sich Benutzer Nachrichten versenden. Ich möchte die Anzeige in Konversationen anzeigen lassen.
Ich habe folgendes Tabellendesign (inkl. Testdaten):

BenutzerID_Sender, BenutzerId_Empfänger, Nachricht, Datum
2, 1, Hi, 05.06.2011 01:30
1, 2, Hi zurück, 05.06.2011 01:35
2, 1, Wie geht´s dir?, 05.06 01:38
3, 4, Hi there, 05.06.2011 1:33
4, 3, Hi, how are you?, 05.06.2011 01:40

Nun bin ich am Überlegen, wie ich eine LINQ Query zusammenbastele, die mir die beiden Konversationen mit der letzten Nachricht (und Datum) zurückgibt. Kann mir da vielleicht jemand auf die Sprünge helfen? Irgendwie bekomme ich das nicht so wirklich hin :-(

Danke schonmal und Gruß!
Yheeky

Thema: Online/Offline Status von Benutzer setzen
Am im Forum: Web-Technologien

Habe es inzwischen geloest.
Bei jedem Seitenaufruf wird ein "Zuletzt gesehen" Wert gesetzt. Wenn dieser Wert aelter ist als 10 Minuten wird man als offline betrachtet.

Denke die Loesung passt fuer mich und vielleicht auch fuer andere :)

Gruss Yheeky

Thema: Online/Offline Status von Benutzer setzen
Am im Forum: Web-Technologien

Hi,

ich habe eine Webanwendung und eine Benutzerverwaltung. In meiner Datenbank habe ich ein Feld, welches das Login-Datum setzt. So kann ich schauen, ob ein Benutzer eingeloggt ist oder nicht. Nur wie kann ich den Logout realisieren?

Ich hoffe mir kann da jemand helfen. Ich benutze das ASP.NET MVC 2 Framework, vielleicht gibts da ja schon was passendes ;)

Danke und Gruss,
Yheeky

Thema: Windows Server zuhause als Webserver?
Am im Forum: Smalltalk

Mein Webhoster hat nur .NET 3.5

Thema: Windows Server zuhause als Webserver?
Am im Forum: Smalltalk

Ok...aber da du auch drei Server hast, scheint es sich wirklich um eine sehr große Anwendung zu handeln. Dass sich in deinem Fall kein eigener Server lohnt, ist dann natürlich klar.
Kannst ich mir mal die MVC-Anwendung anschauen? Hast du die Seite online?
Meine Anwendung ist eher klein gehalten von daher sollte da ein Atom-Prozessor reichen.

Thema: Windows Server zuhause als Webserver?
Am im Forum: Smalltalk

Ok...aber gibt sicherlich auch passable Firewalls für Windows Server 2008. Muss ich mich mal schlau machen.
Hat jemand ein schönes, kleines Servergehäuse für mich (also in Form eines Links :D).