كيفية تخزين كائن (وليس سلسلة) في جلسة في إطار اللعب؟

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

سؤال

لدي مشروع للمدرسة وعلي استخدام جافا. لقد وجدت مؤخرا إطار اللعب وأريد أن أحاول استخدامه. من السهل بما فيه الكفاية ببدء سريع، لكنني ركضت مشكلة في الجلسة.

نظرا لكونها عديمة الجنسية بطبيعتها، ترسل اللعب جلسة كاملة للمستخدم في ملف تعريف الارتباط وتلقيها في الطلب التالي، لذلك يسمح فقط بمبلغ محدود من البيانات في الجلسة.

ما أريد القيام به هو جلب كائن المستخدم من DB على تسجيل دخول المستخدم، والحفاظ عليه في الجلسة، لذلك يمكنني الوصول إليها من القوالب وما إلى ذلك (لدي بعض الأساليب في فئة المستخدم التي أحتاج إلى الاتصال بها من أجل تخصيص واجهة المستخدم )، ولكن إذا وضعت كائن المستخدم، فلا يدعو تشغيل طريقة Tostring ووضع ذلك في الجلسة.

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

هل لدى أي شخص خبرة مع هذا النوع من المشاكل؟

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

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

المحلول

استخدم Serialization Java لتسلسل Hashmap إلى ملف أو إلى قاعدة البيانات. اسم الملف أو معرف العمود بعد معرف فريد تخزنه في ملف تعريف ارتباط المستخدم. ثم ضع كائن المستخدم في hashmap قبل تسلسل hashmap. الآن لديك متجر مستمر يمكنك الوصول إليه. عندما ينسى الإطار كائن المستخدم أو أي معلومات جلسة أخرى، يمكنك استخدام Hashmap. ثم اكتب بعض أساليب المساعد الثابتة، وجزء كائن ثابت DB.GET (معرف السلسلة، مفتاح السلسلة) و DespenseDB.Put (معرف السلسلة، مفتاح السلسلة، قيمة الكائن). يمكنني استخدام هذه الطريقة على إطار بلدي محلية الصنع لتخزين معلومات الجلسة عبر مزرعة خادم صغيرة. بالطبع أنا استخدم قاعدة البيانات، وليس نظام الملفات.

نصائح أخرى

أعتقد أنه يجب أن يكون لديك نظرة على

http://groups.google.com/group/play-framework/browse_thread/thread/3d6946ad0b00303b/188e1b272d91408d؟lnk=gst&q=store+opject+sessionsession#1888e1b272d91408d.

يمكنك أيضا البحث عن هنا هنا 0

http://groups.google.com/group/play-framework.

قائمة مناقشة إطار اللعب في مجموعات Google نشطة للغاية، وعادة ما تحصل على استجابة في غضون يومين، على الأكثر ...

خيار آخر هو تحويل الكائنات الخاصة بك إلى json. لقد أنشأت Util بسيطة لهذا واستخدم FlexJson لتسليط كائناتي في JSON.

import play.Logger;
import play.mvc.Http;
import play.mvc.Http.Session;
import flexjson.JSONDeserializer;
import flexjson.JSONSerializer;

public class SessionManager {

private static JSONSerializer s = new JSONSerializer();

    public static void addSession(String key, Object value) {

        if(value != null) {
            Session session = Http.Context.current().session();
            session.put(key, s.deepSerialize(value));
        } else {
            Logger.info("Value for " + key + " is null");
        }
    }

    public static <T> T get(String key) {

        Session session = Http.Context.current().session();
        final String value = session.get(key);

        if (value == null) {
            return null;
        }

        return new JSONDeserializer<T>().deserialize(value);
    }

}

ملاحظة: عليك أن تدير التنظيف بعد عملك وتضع في اعتبارك أنه نظرا لأن هذا يتم تخزينه في ملف تعريف الارتباط، فهذا غير آمن.

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