Question

J'ai un site ASP classique, qui nécessite des tables de base de données doit être vidé de données de session sur un calendrier. Ce système n'a pas accès à des tâches planifiées (il est sur un hébergeur partagé et utilisant le serveur MySQL)

Je considérais à l'aide global.asa, pour déclencher des événements en tant que tels:

  1. Application_OnStart - supprimer toutes les données de session de la base de données
  2. Application_OnEnd - supprimer toutes les données de session
  3. Session_OnStart - créer un utilisateur » la session
  4. Session_OnEnd -. Supprimer toutes les données de la session qui se rapporte à cette session

Y at-il des raisons pour lesquelles je ne devrais pas créer des connexions de base de données dans global.asa? Ceux-ci seront créés et détruits ici, pas partagé sur session ou champ d'application. Je le vois comme un moyen de l'exécution de ces tâches d'administration deux fois par l'utilisateur (au démarrage de la session et à la fin) et ne pas être tiré à nouveau pour les assimilant à très peu de trafic de base de données.

Quelqu'un a des idées pour lesquelles cela peut être mauvais? Toutes les raisons de ne pas se connecter à une base de données en global.asa?

Si quelqu'un pense que l'idée ci-dessus est un mauvais - avez-vous d'autres idées quant à la façon que je peux vider régulièrement ces tables sans un ou plusieurs de:

  1. Tâche planifiée
  2. Base de données tâche planifiée
  3. L'exécution du code de la charge de page pour chaque page (d'où les crochets Session_OnStart)

Ta '

Noix de coco principal

Était-ce utile?

La solution

Je ferais le nettoyage de la session unique Session_OnEnd et pour toutes les séances à Application_OnStart. Si toutes les sessions, le nettoyage est lent, vous pouvez faire une chose laide et mettez le nettoyage dans un document distinct asp dossier que vous faites une http demande à l'aide de la classe XMLHTTP, rappelez-vous de ne pas attendre la demande de compléter comme ne commencera pas avant d'être servi tout le code dans Application_OnStart est exécuté.

Autres conseils

Vous pouvez écrire une page Web qui vide les tables de session et appeler cette page à partir d'une boîte externe via une tâche planifiée.

Cela dépend de combien de temps vos tâches de nettoyage prendront. Puisque aucune demande sera servi en Application_Start est en cours d'exécution, il peut bloquer pendant un certain temps.

En outre, vous avez aucune garantie que Application_End (ou Session_End) seront appelés dans tous les cas (lorsque le serveur est arrêté, il ne peut pas être tiré, ou une défaillance catastrophique peut contourner ces événements tout à fait).

La meilleure façon serait, comme vous le suggérez, pour exécuter une tâche planifiée en charge du nettoyage des données de session obsolètes.

Si vous avez du trafic cohérent, vous pouvez superposer des petites tâches à la fin d'un cycle de demande. Il suffit de publier un Response.Flush puis exécuter les requêtes db. Bien sûr, vous avez besoin d'écrire que vous êtes propre planificateur. Une autre option est de créer un fichier asp séparé (de tasklet) que vous ping en utilisant un Serverside, async, xmlhttpreq au début de la demande. Cela permet de maintenir le code de nettoyage hors du cycle clients de demande et réduit la latence.

En fait, je woudn't être surpris s'il n'y a pas déjà une base AppEngine intelligente webappr / api qui peut ping vous êtes héritage dans les délais prévus tasklet / webhooks. Et s'il n'y a pas, vous pouvez écrire un vous êtes auto, les options sont infinies:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top