рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд╛рд░реНрдп рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рд╣рд░ рдЕрдкрд╛рдЪреЗ рдФрд░ рдЯреЙрдордХреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЙрдкрдпреБрдХреНрддрддрд╛ рдХреЗ рд╕рд╡рд╛рд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рдХрд╛рд░реНрдп рдХреЛ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рддреНрд░ рдХреЛ Redis рдореЗрдВ PHP рдФрд░ Tomcat рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдпреЗ рд╕рддреНрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВред рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЧреБрдЧрд▓реА рд╡рд┐рдлрд▓ рд░рд╣реАред PHP рдФрд░ Tomcat рджреЛрдиреЛрдВ рдореЗрдВ Redis рдореЗрдВ рд╕рддреНрд░ рднрдВрдбрд╛рд░рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрдВрдбрд╛рд░рдг рдкреНрд░рд╛рд░реВрдк рд╣реИрдВред рд╕рднреА 3 рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ Redc рдореЗрдВ Tomcat рдХреНрд░рдордмрджреНрдз рд╕рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред PHP рдФрд░ Tomcat рдХрд╛ рдХреБрдХреА рд╕рддреНрд░ (PHPSESSID рдФрд░ JSESSID, рдХреНрд░рдорд╢рдГ) рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИрдВред
рджрд░рдЕрд╕рд▓, рдореБрдЭреЗ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдерд╛ред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдореИрдВ рд╕рдм рдХреБрдЫ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: рд╕рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреЗ рдмрд┐рдирд╛; рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрдИрдбреА рдмрдирд╛рдиреЗ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ (рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдирд╛, рдмрдирд╛рдирд╛, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрдордЬреЛрд░); рджреВрд╕рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдП рдЧрдП рдХреЛрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдПрдХ рдиреНрдпреВрдирддрдо рд▓реЗрдЦрдиред
PHP рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рдирд┐рдХрд▓рд╛ред рдПрдХ рдЕрджреНрднреБрдд
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рддреНрд░ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реБрдП, JSON рдореЗрдВ рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, PHP
рд╕рддреНрд░-рдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдХреА рдХреЗ рдирд╛рдо рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рддреЛ PHP рдХреЗ рд╕рд╛рде рдпрд╣ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ред
рдЯреЙрдореНрдХрдЯ рдХрдард┐рди рд╣реЛ рд░рд╣рд╛ рд╣реИред рд░реЗрдбрд┐рд╕ рдореЗрдВ рд╕рддреНрд░реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА 3 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ, рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛ рдЬреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рддреНрд░ рдХреЛ рдмрдЪрд╛ рд╕рдХрддрд╛ рдерд╛, рдЬреЛ рдХрд┐ PHP рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдврд╝рдирд╛ рдХреБрдЫ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ (рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рднреА рдпрд╣ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ) рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐,
рдЯреЙрдордХреИрдЯ рд░реЗрдбрд┐рд╕ рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЬреЗрдирд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░реЗрдбрд┐рд╕ рдореЗрдВ рдПрдХ рд╕рддреНрд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдкреАрдПрдЪрдкреА
рддреЛ PHP рд╕рддреНрд░ рдирд┐рд░реНрдорд╛рдг рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдХрд╛рдо рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

рдирддреАрдЬрддрди, JSON рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХреБрдВрдЬреА-рд╕рддреНрд░ рдЖрдИрдбреА рдФрд░ рд╕рддреНрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд░реЗрдбрд┐рд╕ рдореЗрдВ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред

рдЬрд╛рд╡рд╛ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред
рдЬрд╛рд╡рд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Redis Session Manager рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред xml:
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> <Manager className="com.radiadesign.catalina.session.RedisSessionManager" serializationStrategyClass="com.radiadesign.catalina.session.JSONSerializer"/>
рдпрд╣рд╛рдВ рдореИрдВ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд╣реИ), рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд░рдордмрджреНрдзрддрд╛ StrategyClass рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рддреНрд░ рдХреНрд░рдорд╛рдВрдХрди рд╡рд░реНрдЧ (рдХреЛрдб рдХрдо рд╣реЛрдЧрд╛) рдХреЗ рдореЗрд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкрде рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдбрд╛рдЙрдирд▓реЛрдб рдЯреЙрдордХреИрдЯ-рд░реЗрдбрд┐рд╕-рд╕реЗрд╢рди-рдореИрдиреЗрдЬрд░-1.2-рдЯреЙрдордХреИрдЯ-6.рдЬрд░ рдЖрдкрдХреА рдЯреЙрдордХреИрдЯ рдХреЗ рдХрд╛рдо рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдХреНрд░рдордмрджреНрдзрддрд╛ рд╡рд░реНрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
package com.radiadesign.catalina.session; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.HashMap; import java.util.Enumeration; import java.util.Map; import java.io.ByteArrayOutputStream; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.util.Iterator; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; public class JSONSerializer implements Serializer { private ClassLoader loader; @Override public void setClassLoader(ClassLoader loader) { this.loader = loader; } @Override public byte[] serializeFrom(HttpSession session) throws IOException {
рдпрд╣рд╛рдВ, JSON рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП
Json рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдХрдХреНрд╖рд╛ рдХреЛ рдЬрд╛рд░ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреА рдХреЙрдкреАрдХреЙрдореНрдм рдХреЗ рд▓рд┐рдмрд╛рд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдореЗрд░реЗ рд╕рдВрдХрд▓рди рдЖрджреЗрд╢ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
javac -cp /usr/share/tomcat6/lib/servlet-api.jar:/usr/share/tomcat6/lib/catalina.jar:/usr/share/tomcat6/lib/tomcat-redis-session-manager-1.2-tomcat-6.jar:/usr/share/tomcat6/lib/gson-2.2.2.jar com/radiadesign/catalina/session/JSONSerializer.java jar cf jsonserializer.0.1.jar com
рдмреЗрд╢рдХ, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд░рд╛рд╕реНрддреЗ рдЖрдкрдХреА рдорд╢реАрди рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЦреБрдж рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА, рдореЗрд░реЗ
рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рд╕реЗ рд╕рдорд╛рдкреНрдд рдЬрд╛рд░ рд▓реЗ рд▓реЛред
рд╡рд╣ рд╕рдм рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╕рддреНрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ PHP рдореЗрдВ Tomcat рдХреЗ рд▓рд┐рдП рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдФрд░ рд╕рддреНрд░ рдмрдирд╛рдпрд╛, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ Tomcat рдФрд░ PHP рдХреЗ рдмреАрдЪ рдХреЗ рдЖрдо рд╕рддреНрд░ рд╣реИрдВред
рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЯреЙрдордХреИрдЯ рдореЗрдВ рдПрдХ рд╕рддреНрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ:
import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class HelloServlet extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); HttpSession session = req.getSession(); out.println("ID: " + session.getId()); session.setAttribute("Name", "kapitoka"); out.println("Set done"); out.println("Get result: " + session.getAttribute("Name")); out.close(); } }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рддреНрд░ рд╕реГрдЬрди рдХреЛрдбред
рдЬрд╛рд╡рд╛ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдгрд╛рдо:
