هل من الأفضل تخزين بيانات المستخدم في قاعدة بيانات بدلا من ملفات تعريف الارتباط؟[مغلق]

StackOverflow https://stackoverflow.com/questions/3268159

سؤال

<جانغة Class="S-Notes S-Note__info JS-Post-Nother MB16" دور="الحالة">
مغلق . هذا السؤال هو تستند إلى الرأي . لا يقبل حاليا الإجابات.

هل ترغب في تحسين هذا السؤال؟ تحديث السؤال بحيث يمكن الإجابة عليه مع الحقائق والقرصات حسب تحرير هذا المنشور .

مغلقة قبل عامين .

لماذا لا نحفظ معلومات ملف تعريف الارتباط من زوار موقع الويب (المشتركين) في قاعدة البيانات بدلا من إعداد ملف على جهاز المستخدم. نعم، أعرف أنني قد أبدو سخيف للأسباب التالية:

  1. صيانة معلومات قاعدة البيانات لكل مستخدم واحد من الصعب من الصعب على "قطع البيانات" من أي وقت مضى.

  2. قد يكون من الصعب استرداد البيانات عندما يكون خادم قاعدة البيانات لأسفل.

  3. يجب إجراء طلبات مستمرة على خادم الويب لكل منها وكل قطعة صغيرة من المعلومات.

  4. النقاط الخاصة بي هي، إذا كنا نذهب لتخزين بيانات المستخدم في قاعدة بيانات بدلا من ملف على جهاز العميل، فيمكننا توفير الأمن للعميل من خلال عدم السماح للمنظمات الأخرى أو المواقع الأخرى (أو حتى المتسللين) الوصول إلى معلومات المستخدم من ملفات تعريف الارتباط.

    علاوة على ذلك، يمكننا تتبع أنشطة المستخدم أو سلوك المستخدم. (أعني، نحن في الواقع لا نعرف ما يفعله المستخدم (نشاط جانب العميل) مثل العبثات البيانات.)

    إذا كنت تشعر أنه قد يكون من الصعب إرسال طلبات إلى خادم الويب بشكل مستمر، فليس كذلك، بفضل Ajax. هذا يعطي بعض الدعم لموقعي: إرسال طلبات إلى خادم الويب جعل بسيطة جدا باستخدام Ajax.

    لذلك، هل هي فكرة جيدة تخزين معلومات المستخدم الحساسة للمستخدم في قاعدة بيانات بدلا من إعداد ملف صغير على جهاز المستخدم؟

    لتكون محددة، أنا لا أتحدث عن جلسات!

هل كانت مفيدة؟

المحلول

نهجك صالح بالتأكيد ولكن لديه مشكلة أساسية واحدة (والتي ربما يكون السبب وراء إنشاء ملفات تعريف الارتباط في المقام الأول): تحديد الهوية.

كيف يمكنك تحديد المستخدم A VS. المستخدم B دون طلب اسم المستخدم / كلمة المرور؟توفر ملفات تعريف الارتباط طريقة سهلة لجعل هذا التمايز.بمجرد تحديد المستخدم، تصبح نقاطك صالحة تماما.

بشكل عام، لا تهدف المعلومات الحساسة إلى تخزينها في ملفات تعريف الارتباط.من الأفضل تخزين هذه المعلومات على جانب الخادم (كما ذكرت).

نصائح أخرى

لا ينبغي أن تكون المعلومات الحساسة

في ملف تعريف ارتباط، سأوافق معك هناك.يجب تخزينه في مكان خادم Server، إما في ملف ثابت على الخادم نفسه، أو في قاعدة بيانات.

ما تحتاجه على آلة العميل هو ملف تعريف ارتباط صغير يحتوي على بعض الإشارات الغامضة والأكثر تعيين إلى هذه البيانات الحساسة.

تهانينا!لقد اخترت للتو جلسات!

(يمكن إعداد خادمات الويب لتخزين بيانات الجلسة في قاعدة بيانات بدلا من الملفات المسطحة على الخادم إذا كنت تفضل ذلك بهذه الطريقة.)

صحيح أن الحكمة التقليدية هي تجنب استخدام ملفات تعريف الارتباط للبيانات الحساسة لأنها يتم تخزينها على العميل ويمكن للمقلقة العبث معهم وربما إلحاق الضرر.ومع ذلك، هناك سبب مقنع لماذا قد تكون ملفات تعريف الارتباط تستحق نظرة ثانية: قابلية التوسع.من الصعب الحصول على مجموعة عالية الأداء من بيانات الجلسة المتاحة لعدد تعسفي من الخوادم السحابية:

http://waws.typepad.com/awsouse/2012/04/scalable-session-handling-in-php-using-amazon-dynamodb.html

هنا رابط وجدته في تفصيل كبير حول كيفية بناء نظام ملفات تعريف الارتباط الآمن:

href="http://www.cse.msu.edu/glalexliu/publications/cookie/cookie.pdf" rel="nofollow"> http://www.cse.msu.edu/~Alexliu / المنشورات / ملف تعريف الارتباط / Cookie.pdf

لذلك قد يكون هذا العمر الجديد جديد مرة أخرى.

Generally we use cookies because we're not necessarily setting any sensitive data in them. If your application does has sensitive data that you don't want anybody fiddling with then by all means use every server-side and DB tool at your disposal to solve that, but not all applications and implementations need that level of security in these respects. Setting cookies is for convenience, that's all.

This is done already, or we'd be storing user names, addresses, and credit card information in a cookie rather than on the database. You have to evaluate what makes sense to keep in the database vs. what makes sense to store as a cookie. Server performance, bandwidth, scalability - all of these have to be kept in mind. Remember that the more we store server side, the more we'll have to deliver client-side.

You also mention sessions - sessions are cookies (kinda).

I came across this post whilst looking for some similar advice related to the cookie vs database argument.

Say, I have some user data in the form of integer lists, i.e. some bookmarked products, a max of 80 per user.

In the database, this could transpose to say 4 tables (1 for each data type), so that's 20 rows per user.

If you had a million unique visitors per annum and for arguments sake 70% were guest users as opposed to members, then this could add 14m rows to a table, which otherwise might be just 6m rows. Of course you could have a cull policy for guest users, but that becomes awkward to manage accurately - whats to say a user doesn't return after 9 months to find his/her data wiped.

The other side of the coin is that guest data is stored in cookies, so it doesn't matter how long its stored. I appreciate that more work is involved managing two storage methods but thats the only downside I can think of.

Anyone got any views on this, as I'd appreciate some advice.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top