Σφάλματα #124
Online χρήστες σε shared hosting environments
0%
Description
Αντιμετωπίζω το εξής πρόβλημα: Σε φρέσκια εγκατάσταση της πλατφόρμας, μου εμφανίζει 120 χρήστες online. Κάνοντας refresh διαπιστώνω πως το νούμερο αλλάζει συνεχώς και δεν ταιριάζει με τους αληθινούς online επισκέπτες. Με λίγο ψάξιμο είδα πως ο αριθμός αυτός βγαίνει μετρώντας τα session files. Το πρόβλημα είναι πως η δική μου εγκατάσταση είναι σε shared hosting environment και η default τιμή του session_save_path() είναι /tmp. Αποτέλεσμα, οι περισσότερες εφαρμογές στον server δεν αλλάζουν την τιμή αυτή και η συνάρτηση getOnlineUsers() στο main.lib.php στην σειρά 2416 μετράει τα session files όλων των εφαρμογών στον server.
Στην συνάρτηση session_save_path() μπορεί να δοθεί custom path, αλλά αναφέρονται διάφορα θεματάκια και στο php.net και σε διάφορα questions στο stackoverflow... Πρέπει να ερευνηθεί, αν θέλετε να υποστηρίζεται η μέτρηση online χρηστών σε shared hosting περιβάλλοντα.
Έκανα μερικές δοκιμές από άλλο domain και φόρτωσα το session του admin από το eclass, στο άλλο domain. Δεν υπάρχουν πολύ ευαίσθητες πληροφορίες αλλά δεν είναι "θέμα ασφαλείας" αυτό?
History
Updated by Yannis Exidaridis almost 11 years ago
Πράγματι δεν το είχαμε σκεφτεί ότι σε shared hosting enviroments δεν θα λειτουργεί σωστά. Το κρατάμε ανοιχτό μέχρι να διερευνήσουμε τι μπορεί να γίνει σε τέτοιες περιπτώσεις.
Updated by Yury Kherimyan over 10 years ago
- Subject changed from Online χρήστες to Online χρήστες σε shared hosting environments
Updated by Thanos Kyritsis over 10 years ago
Θα μπορούσαμε να ρίξουμε μια ματιά τί κάνουν όλα αυτά τα PHP forums (πχ phpBB, vBulletin, κλπ) και μπορούν και δείχνουν πόσοι είναι online σε μια δεδομένη χρονική στιγμή, για να πάρουμε ιδέες. Αν και πολύ φοβάμαι πως δε γίνεται σωστά χωρίς κώδικα που να γράφει σε πίνακα βάσης και να κρατάει ρητές εγγραφές για τα τρέχοντα logins.
Updated by Yury Kherimyan over 10 years ago
Περίμενα να κάνει το link από το commit, αλλά δεν εμφανίζει τπτ από το http://hg.gunet.gr/openeclass από τις 6/2/2014 (χάλασε κάτι?)
Anyway στο εξής changeset: http://hg.gunet.gr/openeclass/rev/2e33234bdbb4, βελτιώνω τη κατάσταση αλλά το πρόβλημα δεν λύνεται πλήρως.
Το σχετικό commit message:
Little code change in getOnlineUsers. Checking only files starting with sess_ (SESSION files) and if script executor is file's owner count them as an online user. In shared hosting enviroments (#124) there are a lot of session files in /tmp but this way only those who belong to your package is counted. Still not the best solution because if you have other applications in your hosting package, saving sessions those will be counted too. However, number is (significantly) more accurate than before.
Updated by Yannis Exidaridis over 10 years ago
Η αλλαγή με χρήση της getmyuid() δεν λειτουργεί σωστά. Ο λόγος είναι ότι το owner uid δεν είναι το ίδιο με το effective uid (δες και http://www.php.net/manual/en/function.getmyuid.php). Αφαίρεσα τον έλεγχο.